extract Simulation::initializeSubsystems to remove duplicate code
This commit is contained in:
@@ -48,32 +48,7 @@ Simulation::Simulation(GameConfig config, unsigned int seed)
|
|||||||
m_currentEnemyStationEntities[0] = entt::null;
|
m_currentEnemyStationEntities[0] = entt::null;
|
||||||
m_currentEnemyStationEntities[1] = entt::null;
|
m_currentEnemyStationEntities[1] = entt::null;
|
||||||
|
|
||||||
m_buildingSystem = std::make_unique<BuildingSystem>(
|
initializeSubsystems();
|
||||||
m_config,
|
|
||||||
m_beltSystem,
|
|
||||||
[this]() { return allocateBuildingId(); },
|
|
||||||
[this](int amount) { m_buildingBlocksStock += amount; },
|
|
||||||
[this](const std::string& id, QVector2D pos,
|
|
||||||
const std::optional<ShipLayoutConfig>& layout) {
|
|
||||||
const std::map<std::string, SchematicState>::const_iterator it =
|
|
||||||
m_schematicLevels.find(id);
|
|
||||||
if (it == m_schematicLevels.end() || !it->second.unlocked)
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
m_shipSystem->spawn(id, pos, /*isEnemy=*/false, layout);
|
|
||||||
},
|
|
||||||
[this](const std::string& itemId) -> bool { return isItemUnlocked(itemId); },
|
|
||||||
m_rng);
|
|
||||||
m_shipSystem = std::make_unique<ShipSystem>(m_config, m_admin);
|
|
||||||
m_aiSystem = std::make_unique<AiSystem>(m_config);
|
|
||||||
m_movementIntentSystem = std::make_unique<MovementIntentSystem>();
|
|
||||||
m_dynamicBodySystem = std::make_unique<DynamicBodySystem>();
|
|
||||||
m_debrisSystem = std::make_unique<DebrisSystem>(m_admin);
|
|
||||||
m_salvagerSystem = std::make_unique<SalvagerSystem>(m_admin);
|
|
||||||
m_repairSystem = std::make_unique<RepairSystem>(m_admin);
|
|
||||||
m_waveSystem = std::make_unique<WaveSystem>(m_config, m_rng);
|
|
||||||
m_combatSystem = std::make_unique<CombatSystem>(m_config);
|
|
||||||
|
|
||||||
initializeUnlockState();
|
initializeUnlockState();
|
||||||
placeInitialStructures();
|
placeInitialStructures();
|
||||||
@@ -120,6 +95,14 @@ void Simulation::reset(unsigned int seed)
|
|||||||
|
|
||||||
m_admin.clear();
|
m_admin.clear();
|
||||||
m_beltSystem = BeltSystem(m_config.world.beltSpeed_tps);
|
m_beltSystem = BeltSystem(m_config.world.beltSpeed_tps);
|
||||||
|
initializeSubsystems();
|
||||||
|
|
||||||
|
initializeUnlockState();
|
||||||
|
placeInitialStructures();
|
||||||
|
}
|
||||||
|
|
||||||
|
void Simulation::initializeSubsystems()
|
||||||
|
{
|
||||||
m_buildingSystem = std::make_unique<BuildingSystem>(
|
m_buildingSystem = std::make_unique<BuildingSystem>(
|
||||||
m_config,
|
m_config,
|
||||||
m_beltSystem,
|
m_beltSystem,
|
||||||
@@ -146,9 +129,6 @@ void Simulation::reset(unsigned int seed)
|
|||||||
m_repairSystem = std::make_unique<RepairSystem>(m_admin);
|
m_repairSystem = std::make_unique<RepairSystem>(m_admin);
|
||||||
m_waveSystem = std::make_unique<WaveSystem>(m_config, m_rng);
|
m_waveSystem = std::make_unique<WaveSystem>(m_config, m_rng);
|
||||||
m_combatSystem = std::make_unique<CombatSystem>(m_config);
|
m_combatSystem = std::make_unique<CombatSystem>(m_config);
|
||||||
|
|
||||||
initializeUnlockState();
|
|
||||||
placeInitialStructures();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Simulation::initializeUnlockState()
|
void Simulation::initializeUnlockState()
|
||||||
|
|||||||
@@ -165,6 +165,11 @@ private:
|
|||||||
|
|
||||||
BuildingId allocateBuildingId(); // Strictly increasing; never returns kInvalidBuildingId.
|
BuildingId allocateBuildingId(); // Strictly increasing; never returns kInvalidBuildingId.
|
||||||
|
|
||||||
|
// (Re-)create every owned subsystem. Shared by the constructor and reset();
|
||||||
|
// the construction order is load-bearing for determinism, so both paths must
|
||||||
|
// go through here. Only called before the first tick of a run.
|
||||||
|
void initializeSubsystems();
|
||||||
|
|
||||||
// Populate HQ, player defence stations, and the first enemy station set.
|
// Populate HQ, player defence stations, and the first enemy station set.
|
||||||
void placeInitialStructures();
|
void placeInitialStructures();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user