make construction its own system
ConstructionSystem takes over the construction queue: it runs the front site's timer and, when it elapses, builds the Building itself — ports, buffers, belt registration, and starting the next queued site. Simulation::tick calls it directly, in the same position tickConstruction held. No handoff. The earlier sketch had it return the completed site for BuildingSystem to materialise, which put an intermediate value in Simulation and made the two calls correct only when adjacent and ordered. Once the queries and the buffer helpers became free functions there was nothing left on BuildingSystem that materialisation needed, so the system does the whole job and the invariant disappears rather than being documented. Holds only the config; the world arrives per tick, like the systems in lib/ecs/system. Verified with a golden-checksum capture before and after — all four sample ticks identical, which is the check that matters here since this moves a call in the tick order. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YHcUerKAZKWNvSKJxYKbnG
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
#include "Simulation.h"
|
||||
|
||||
#include "FactoryQueries.h"
|
||||
#include "ConstructionSystem.h"
|
||||
#include "PlacementRules.h"
|
||||
|
||||
#include <algorithm>
|
||||
@@ -123,6 +124,7 @@ void Simulation::initializeSubsystems()
|
||||
},
|
||||
[this](const std::string& itemId) -> bool { return isItemUnlocked(itemId); },
|
||||
m_rng);
|
||||
m_constructionSystem = std::make_unique<ConstructionSystem>(m_config);
|
||||
m_shipSystem = std::make_unique<ShipSystem>(m_config, m_admin);
|
||||
m_aiSystem = std::make_unique<AiSystem>(m_config);
|
||||
m_movementIntentSystem = std::make_unique<MovementIntentSystem>();
|
||||
@@ -243,7 +245,7 @@ void Simulation::tick()
|
||||
m_waveSystem->tickThreatAccumulation();
|
||||
|
||||
// Construction + production pipeline
|
||||
m_buildingSystem->tickConstruction(m_factoryState, m_currentTick);
|
||||
m_constructionSystem->tick(m_factoryState, m_beltSystem, m_currentTick);
|
||||
m_buildingSystem->tickDeconstruction(m_factoryState, m_currentTick); // parallel to construction
|
||||
m_buildingSystem->tickBeltPull(m_factoryState); // step 3
|
||||
m_buildingSystem->tickProduction(m_factoryState, m_currentTick); // step 4
|
||||
|
||||
Reference in New Issue
Block a user