Tint not-yet-buildable asteroid area

This commit is contained in:
2026-07-13 21:42:59 +02:00
parent 80a2622267
commit 3ce6e6d599
4 changed files with 14 additions and 1 deletions

View File

@@ -918,15 +918,25 @@ void GameWorldView::drawTiles(QPainter& painter)
const int rightTile = leftTile + static_cast<int>(std::ceil(viewportWidthTiles())) + 2;
const int bottomTile = m_config->world.heightTiles;
// Asteroid columns left of the buildable edge are not yet unlocked by
// expansion; tint them so the player sees the reachable-but-locked area.
const int buildableLeftX = -m_sim->currentAsteroidWidth_tiles();
painter.setPen(Qt::NoPen);
for (int x = leftTile; x <= rightTile; ++x)
{
const QColor& fill = (x < 0)
? m_visuals->asteroid.fill
: m_visuals->space.fill;
const bool locked = (x < buildableLeftX);
for (int y = 0; y < bottomTile; ++y)
{
painter.fillRect(tileRect(QPoint(x, y)), fill);
const QRectF rect = tileRect(QPoint(x, y));
painter.fillRect(rect, fill);
if (locked)
{
painter.fillRect(rect, m_visuals->overlays.lockedAsteroid);
}
}
}
}

View File

@@ -49,6 +49,7 @@ struct OverlayVisuals
QColor tileHighlight;
QColor selectedOutline;
QColor copyConfig;
QColor lockedAsteroid;
};
struct ToastVisuals

View File

@@ -225,6 +225,7 @@ VisualsConfig VisualsLoader::load(const std::string& path)
cfg.overlays.tileHighlight = parseColor(requireString(ov, "tile_highlight", "overlays"), "overlays.tile_highlight");
cfg.overlays.selectedOutline = parseColor(requireString(ov, "selected_outline", "overlays"), "overlays.selected_outline");
cfg.overlays.copyConfig = parseColor(requireString(ov, "copy_config", "overlays"), "overlays.copy_config");
cfg.overlays.lockedAsteroid = parseColor(requireString(ov, "locked_asteroid", "overlays"), "overlays.locked_asteroid");
}
// Toast