implement building system

This commit is contained in:
2026-04-19 20:50:42 +02:00
parent c70b5c8f08
commit bf29cc40e3
19 changed files with 1818 additions and 7 deletions

View File

@@ -1,15 +1,33 @@
#include "Simulation.h"
#include "BuildingSystem.h"
Simulation::Simulation(const GameConfig& config, unsigned int seed)
: m_config(config)
, m_rng(seed)
, m_currentTick(0)
, m_nextId(1)
, m_buildingBlocksStock(config.world.startingBuildingBlocks)
, m_beltSystem(config.world.beltSpeedTilesPerSecond)
{
m_buildingSystem = std::make_unique<BuildingSystem>(
config,
m_beltSystem,
[this]() { return allocateId(); },
[this](int amount) { m_buildingBlocksStock += amount; },
m_rng);
}
Simulation::~Simulation() = default;
void Simulation::tick()
{
m_buildingSystem->tickConstruction(m_currentTick);
m_buildingSystem->tickBeltPull(); // tick order step 3
m_buildingSystem->tickProduction(m_currentTick); // step 4
m_buildingSystem->tickBeltPush(); // step 5
m_beltSystem.tick(); // step 6
++m_currentTick;
}
@@ -32,6 +50,31 @@ Tick Simulation::currentTick() const
return m_currentTick;
}
int Simulation::buildingBlocksStock() const
{
return m_buildingBlocksStock;
}
BuildingSystem& Simulation::buildings()
{
return *m_buildingSystem;
}
const BuildingSystem& Simulation::buildings() const
{
return *m_buildingSystem;
}
BeltSystem& Simulation::belts()
{
return m_beltSystem;
}
const BeltSystem& Simulation::belts() const
{
return m_beltSystem;
}
EntityId Simulation::allocateId()
{
return m_nextId++;