31 lines
1.1 KiB
C++
31 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include "BeltSystem.h"
|
|
#include "FactoryState.h"
|
|
#include "GameConfig.h"
|
|
#include "Tick.h"
|
|
|
|
// Advances the construction queue and turns a finished site into an operational
|
|
// building (REQ-BLD-CONSTRUCTION). One site is built at a time, in queue order:
|
|
// the front site's timer runs, and when it elapses the site becomes a Building —
|
|
// its ports and buffers are derived from its definition, its belt tile is handed
|
|
// back to BeltSystem, and the next queued site starts.
|
|
//
|
|
// It completes the building itself rather than handing the finished site back to
|
|
// BuildingSystem: everything materialisation needs is either in FactoryState, the
|
|
// config, or a free function (see BuildingBuffers.h, PortGeometry.h), so there is
|
|
// no intermediate value to pass and no ordering rule between two calls.
|
|
//
|
|
// Holds only the config; the world it works on arrives per tick, like the other
|
|
// systems in lib/ecs/system.
|
|
class ConstructionSystem
|
|
{
|
|
public:
|
|
explicit ConstructionSystem(const GameConfig& config) : m_config(config) {}
|
|
|
|
void tick(FactoryState& state, BeltSystem& belts, Tick currentTick);
|
|
|
|
private:
|
|
const GameConfig& m_config;
|
|
};
|