gather the factory's world data into FactoryState
BuildingSystem is the one system in the codebase that owns the world data it operates on. The ecs/system/ classes already do the opposite — AiSystem and SalvagerSystem hold config and their own scratch, and take EntityAdmin and the other systems as tick arguments — so this is bringing the outlier in line, not inventing a pattern. Phase 1 of that: the buildings vector, both work queues and the tile grid move into a FactoryState struct, still owned by BuildingSystem. Every method reaches through m_state. The public API is untouched, so none of the 33 files that reference BuildingSystem needed a change. DeconstructionEntry moves out of BuildingSystem's private section into FactoryState.h, since the queue that holds it lives there now. m_asteroidWidth_tiles stays on the system: it is not checksummed and is a cached placement bound derived from config and the expansion count, not factory data. The intent is for Simulation to own FactoryState and pass it into the tick methods, leaving the systems stateless over it. FactoryState.h notes explicitly that this is a data/behaviour split and not a step toward putting buildings in the entity model, which architecture.md rules out. 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:
@@ -15,7 +15,7 @@
|
||||
|
||||
#include "BeltSystem.h"
|
||||
#include "Building.h"
|
||||
#include "BuildingGrid.h"
|
||||
#include "FactoryState.h"
|
||||
#include "BuildingType.h"
|
||||
#include "BuildingId.h"
|
||||
#include "GameConfig.h"
|
||||
@@ -294,23 +294,8 @@ private:
|
||||
std::mt19937& m_rng;
|
||||
int m_asteroidWidth_tiles;
|
||||
|
||||
std::vector<Building> m_buildings;
|
||||
std::deque<ConstructionSite> m_constructionQueue;
|
||||
|
||||
// One pending demolition of a fully-built building (REQ-BLD-DECON-QUEUE).
|
||||
// completesAt == 0 means "queued but its timer has not started yet"
|
||||
// (mirrors ConstructionSite). For a Splitter, the filters it had are captured
|
||||
// here so cancelDeconstruction can restore them on re-registration.
|
||||
struct DeconstructionEntry
|
||||
{
|
||||
BuildingId id = kInvalidBuildingId;
|
||||
Tick completesAt = 0;
|
||||
std::vector<ItemType> splitterFilterA;
|
||||
std::vector<ItemType> splitterFilterB;
|
||||
};
|
||||
std::deque<DeconstructionEntry> m_deconstructionQueue;
|
||||
|
||||
// The authority on which building owns which tile; every placement and removal
|
||||
// path claims and releases its body cells here.
|
||||
BuildingGrid m_grid;
|
||||
// The factory's world data — buildings, queued work, tile ownership. Held here
|
||||
// for now; the intent is for Simulation to own it and pass it into the tick
|
||||
// methods, leaving this system stateless over it (see FactoryState.h).
|
||||
FactoryState m_state;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user