From 785ce3ebfed355dc99f91df5edb1ee418c7d2ba0 Mon Sep 17 00:00:00 2001 From: mlangkabel Date: Mon, 3 Aug 2026 21:14:13 +0200 Subject: [PATCH] remove duplicate findBuildingDef from BuildingSystem --- src/lib/sim/BuildingSystem.cpp | 37 ++++++++++++---------------------- src/lib/sim/BuildingSystem.h | 1 - 2 files changed, 13 insertions(+), 25 deletions(-) diff --git a/src/lib/sim/BuildingSystem.cpp b/src/lib/sim/BuildingSystem.cpp index a634aa2..f1bdc62 100644 --- a/src/lib/sim/BuildingSystem.cpp +++ b/src/lib/sim/BuildingSystem.cpp @@ -95,18 +95,6 @@ BuildingSystem::BuildingSystem(const GameConfig& config, // Private helpers // --------------------------------------------------------------------------- -const BuildingDef* BuildingSystem::findBuildingDef(BuildingType type) const -{ - for (const BuildingDef& def : m_config.buildings.buildings) - { - if (def.type == type) - { - return &def; - } - } - return nullptr; -} - void BuildingSystem::initBuffers(Building& b, const RecipeDef& recipe) const { b.inputBuffer.counts.clear(); @@ -235,7 +223,7 @@ void BuildingSystem::initSalvageBayBuffer(Building& b) const // Salvage Bay has no recipe-driven buffer; its output-buffer holding size for // ship drop-off is config-defined (REQ-BLD-SALVAGE-BAY). b.outputBuffer.items.clear(); - const BuildingDef* def = findBuildingDef(BuildingType::SalvageBay); + const BuildingDef* def = m_config.buildings.findBuildingDef(BuildingType::SalvageBay); b.outputBuffer.capacity = (def && def->outputBufferCapacity) ? *def->outputBufferCapacity : 0; } @@ -308,7 +296,7 @@ std::vector BuildingSystem::getInputPorts(BuildingId id) const { // A site stores no ports; derive its output ports from the mask (absolute) // and run the same input-edge scan (REQ-BLD-BELT-DRAG, REQ-MAT-INPUT-PORTS). - const BuildingDef* def = findBuildingDef(site->type); + const BuildingDef* def = m_config.buildings.findBuildingDef(site->type); if (def == nullptr) { return {}; } const ParsedSurfaceMask mask = parseSurfaceMask(def->surfaceMask, site->rotation); std::vector outputPortsAbsolute; @@ -354,7 +342,7 @@ std::vector BuildingSystem::rollReprocessingOutput(const RecipeDef& recipe std::optional BuildingSystem::place(BuildingType type, QPoint anchor, Rotation rotation, Tick currentTick) { - const BuildingDef* def = findBuildingDef(type); + const BuildingDef* def = m_config.buildings.findBuildingDef(type); assert(def != nullptr); const ParsedSurfaceMask mask = parseSurfaceMask(def->surfaceMask, rotation); @@ -418,7 +406,7 @@ bool BuildingSystem::bodyCellsWithinWorldBounds(const std::vector& bodyC bool BuildingSystem::isPlacementValid(BuildingType type, QPoint anchor, Rotation rotation) const { - const BuildingDef* def = findBuildingDef(type); + const BuildingDef* def = m_config.buildings.findBuildingDef(type); if (def == nullptr) { return false; @@ -473,7 +461,7 @@ int BuildingSystem::deconstruct(BuildingId id, Tick currentTick) { if (it->id == id) { - const BuildingDef* def = findBuildingDef(it->type); + const BuildingDef* def = m_config.buildings.findBuildingDef(it->type); for (const QPoint& cell : it->bodyCells) { m_tileOccupancy.erase({cell.x(), cell.y()}); @@ -664,7 +652,7 @@ BuildingSystem::getSiteSplitterInfo(BuildingId id) const if (site.id != id) { continue; } if (site.type != BuildingType::Splitter) { return std::nullopt; } - const BuildingDef* def = findBuildingDef(site.type); + const BuildingDef* def = m_config.buildings.findBuildingDef(site.type); const ParsedSurfaceMask mask = parseSurfaceMask( def ? def->surfaceMask : std::vector{}, site.rotation); if (mask.outputPorts.size() < 2) { return std::nullopt; } @@ -711,7 +699,7 @@ void BuildingSystem::tickConstruction(Tick currentTick) // Guard: if somehow the front site was never started, start it now. if (front.completesAt == 0) { - const BuildingDef* def = findBuildingDef(front.type); + const BuildingDef* def = m_config.buildings.findBuildingDef(front.type); if (def) { front.completesAt = currentTick + secondsToTicks(def->constructionTimeSeconds); @@ -725,7 +713,7 @@ void BuildingSystem::tickConstruction(Tick currentTick) } // Promote construction site to an operational Building. - const BuildingDef* def = findBuildingDef(front.type); + const BuildingDef* def = m_config.buildings.findBuildingDef(front.type); const ParsedSurfaceMask mask = parseSurfaceMask( def ? def->surfaceMask : std::vector{}, front.rotation); @@ -791,7 +779,8 @@ void BuildingSystem::tickConstruction(Tick currentTick) // Start next queued site if present. if (!m_constructionQueue.empty() && m_constructionQueue.front().completesAt == 0) { - const BuildingDef* nextDef = findBuildingDef(m_constructionQueue.front().type); + const BuildingDef* nextDef = + m_config.buildings.findBuildingDef(m_constructionQueue.front().type); if (nextDef) { m_constructionQueue.front().completesAt = @@ -859,7 +848,7 @@ void BuildingSystem::tickDeconstruction(Tick currentTick) { if (it->id != front.id) { continue; } - const BuildingDef* def = findBuildingDef(it->type); + const BuildingDef* def = m_config.buildings.findBuildingDef(it->type); for (const QPoint& cell : it->bodyCells) { m_tileOccupancy.erase({cell.x(), cell.y()}); @@ -1601,7 +1590,7 @@ std::optional BuildingSystem::findRotateInPlaceTarget( return std::nullopt; } - const BuildingDef* def = findBuildingDef(type); + const BuildingDef* def = m_config.buildings.findBuildingDef(type); if (!def) { return std::nullopt; } const ParsedSurfaceMask mask = parseSurfaceMask(def->surfaceMask, rot); @@ -1661,7 +1650,7 @@ void BuildingSystem::rotateInPlace(BuildingId id, Rotation newRotation) b.rotation = newRotation; - const BuildingDef* def = findBuildingDef(b.type); + const BuildingDef* def = m_config.buildings.findBuildingDef(b.type); if (!def) { return; } const ParsedSurfaceMask mask = parseSurfaceMask(def->surfaceMask, newRotation); diff --git a/src/lib/sim/BuildingSystem.h b/src/lib/sim/BuildingSystem.h index e29a3bb..349c5e7 100644 --- a/src/lib/sim/BuildingSystem.h +++ b/src/lib/sim/BuildingSystem.h @@ -267,7 +267,6 @@ private: // the status light (REQ-UI-STATUS-LIGHT). bool hasInputsToStart(const Building& b) const; - const BuildingDef* findBuildingDef(BuildingType type) const; void initBuffers(Building& b, const RecipeDef& recipe) const; // Buffers for an auto-recipe building (Smelter, Reprocessing Plant): input // caps span the union of every recipe of the building's type; no player