Implement AddEntityAction
This MR intends to add the implementation for AddEntityAction.
Additional work beyond original scope
When starting this work, there was a wrong assumption that we could simply call Add(name) from IEntityRepository, but the actual MantleAPI interface doesn't have an Add(name) that recreates a previously defined entity. Only Create(name, properties) exists, which requires the full entity properties (bounding box, performance, axles, etc.) at call time.
This means AddEntityAction can't just "add" an entity by name — it needs to defer the full creation that normally happens at scenario initialization. This required the following additional work:
-
Entity registration and deferred creation — Extended
EntityCreatorwithRegisterScenarioObjects()(stores all scenario object blueprints by name) andCreateEntityByName()(creates an entity from a stored blueprint at runtime). Also addedGetScenarioObject()so controllers can be created for the entity later. -
Init-time filtering via
ScenarioObjectCreationNode— Added a new YASEActionNode(ScenarioObjectCreationNode) as the first child ofRootNode. On first tick, it creates all entities and controllers except those flagged by AddEntityAction nodes. During tree construction (lookupAndRegisterData), eachAddEntityActioninserts its entity name into a sharedAddEntityActionEntityNamesset on the blackboard.ResetAndCreateEntities()was simplified toResetAndRegisterEntities()(only resets repositories and registers scenario objects), andResetAndCreateControllers()was removed entirely. -
Controller creation at trigger time — When AddEntityAction fires, it needs to not only create the entity and set its position, but also create and assign controllers (default controller at minimum). This required wiring
ControllerCreatorthrough the blackboard alongsideEntityCreator, and callingCreateControllers()inEntityUtils::AddEntity(). -
EntityUtils::AddEntity()— Encapsulates the full add flow (create entity → set position → create controllers) as a static method, symmetric with the existingEntityUtils::RemoveEntity()used by DeleteEntityAction.