move FactoryState ownership out of BuildingSystem to Simulation
Simulation (and ArenaSimulation in the balancing tool) now owns the factory's world data; BuildingSystem holds a reference to it. This is what lets the systems that operate on the data be handed the same state — phase 3's construction and deconstruction systems, and later the ecs/system/ classes that today take a BuildingSystem& only to query it. reset() clears the state alongside m_admin and m_beltSystem, matching how the subsystems were already rebuilt from scratch. Falls short of the tick-argument form I sketched: BuildingSystem still reaches the data through a member reference rather than a parameter. Making it truly stateless means the const query surface has to find the data some other way, and that surface is large — findBuilding alone has 64 call sites, with findSite, getAllBuildings, getAllSites, isTileOccupied and the rest behind it. Doing that needs a queries facade behind Simulation::getBuildings() so the callers do not all move, which is its own decision rather than a side effect of this one. The constructor gains a parameter, so the four owners and the three test fixtures that build a BuildingSystem directly are updated; the 33 files that only use one are untouched. Verified with a golden-checksum capture before and after — all four sample ticks identical. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01YHcUerKAZKWNvSKJxYKbnG
This commit is contained in:
@@ -23,6 +23,7 @@ bool inputLaneEntryFree(const std::vector<BeltItemSlot>& lane)
|
||||
} // namespace
|
||||
|
||||
BuildingSystem::BuildingSystem(const GameConfig& config,
|
||||
FactoryState& state,
|
||||
BeltSystem& belts,
|
||||
std::function<BuildingId()> allocateBuildingId,
|
||||
std::function<void(int)> addBuildingBlocks,
|
||||
@@ -31,6 +32,7 @@ BuildingSystem::BuildingSystem(const GameConfig& config,
|
||||
std::function<bool(const std::string&)> isItemUnlocked,
|
||||
std::mt19937& rng)
|
||||
: m_config(config)
|
||||
, m_state(state)
|
||||
, m_belts(belts)
|
||||
, m_allocateBuildingId(std::move(allocateBuildingId))
|
||||
, m_addBuildingBlocks(std::move(addBuildingBlocks))
|
||||
|
||||
Reference in New Issue
Block a user