From 46188bd9cac6e282d578d3a179c2f1505e835e6a Mon Sep 17 00:00:00 2001 From: mlangkabel Date: Mon, 20 Apr 2026 21:18:14 +0200 Subject: [PATCH] fix belts were not drawn --- src/lib/sim/BuildingSystem.cpp | 15 +++++++++++++++ src/lib/sim/BuildingSystem.h | 8 ++++++++ src/ui/GameWorldView.cpp | 15 +++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/src/lib/sim/BuildingSystem.cpp b/src/lib/sim/BuildingSystem.cpp index da15b97..336a668 100644 --- a/src/lib/sim/BuildingSystem.cpp +++ b/src/lib/sim/BuildingSystem.cpp @@ -656,6 +656,21 @@ std::vector BuildingSystem::allSites() const m_constructionQueue.end()); } +std::vector BuildingSystem::allBeltTiles() const +{ + std::vector result; + result.reserve(m_beltEntities.size()); + for (const std::map::value_type& kv : m_beltEntities) + { + BeltTileInfo info; + info.id = kv.first; + info.tile = kv.second.tile; + info.type = kv.second.type; + result.push_back(info); + } + return result; +} + bool BuildingSystem::isTileOccupied(QPoint tile) const { return m_tileOccupancy.count({tile.x(), tile.y()}) > 0; diff --git a/src/lib/sim/BuildingSystem.h b/src/lib/sim/BuildingSystem.h index f4c1623..2c6f5bd 100644 --- a/src/lib/sim/BuildingSystem.h +++ b/src/lib/sim/BuildingSystem.h @@ -55,10 +55,18 @@ public: void tickBeltPush(); // -- Queries ------------------------------------------------------------- + struct BeltTileInfo + { + EntityId id; + QPoint tile; + BuildingType type; // Belt or Splitter + }; + const Building* findBuilding(EntityId id) const; const ConstructionSite* findSite(EntityId id) const; std::vector allBuildings() const; std::vector allSites() const; + std::vector allBeltTiles() const; bool isTileOccupied(QPoint tile) const; // Find nearest operational building of the given type; nullptr if none. diff --git a/src/ui/GameWorldView.cpp b/src/ui/GameWorldView.cpp index 4e8dab8..427545e 100644 --- a/src/ui/GameWorldView.cpp +++ b/src/ui/GameWorldView.cpp @@ -518,6 +518,21 @@ void GameWorldView::drawBuildings(QPainter& painter) } } + // Belt and splitter tiles (stored separately from regular buildings) + for (const BuildingSystem::BeltTileInfo& info : m_sim->buildings().allBeltTiles()) + { + const std::map::const_iterator it = + m_visuals->buildings.find(info.type); + if (it == m_visuals->buildings.end()) { continue; } + const BuildingVisuals& bv = it->second; + + painter.setPen(Qt::NoPen); + painter.fillRect(tileRect(info.tile), bv.fill); + painter.setPen(QPen(bv.outline, 1)); + painter.setBrush(Qt::NoBrush); + painter.drawRect(tileRect(info.tile)); + } + painter.setOpacity(0.5); for (const ConstructionSite& s : m_sim->buildings().allSites()) {