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

@@ -349,6 +349,7 @@ selection_rect = "#00ff00" # box-drag selection rectangle (REQ-UI-MULTI-SELE
tile_highlight = "#ffffff22" # tile under cursor tile_highlight = "#ffffff22" # tile under cursor
selected_outline = "#ffff00" # outline drawn around currently-selected building(s) selected_outline = "#ffff00" # outline drawn around currently-selected building(s)
copy_config = "#33ccff66" # copy-settings eligible-target tint + copy/paste flash (REQ-BLD-COPY-CONFIG-FEEDBACK) copy_config = "#33ccff66" # copy-settings eligible-target tint + copy/paste flash (REQ-BLD-COPY-CONFIG-FEEDBACK)
locked_asteroid = "#0000007f" # tint over the asteroid left of the buildable edge (not yet unlocked by expansion)
# ----------------------------------------------------------------------------- # -----------------------------------------------------------------------------
# Schematic-drop toasts (REQ-UI-SCHEMATIC-TOAST) # Schematic-drop toasts (REQ-UI-SCHEMATIC-TOAST)

View File

@@ -918,15 +918,25 @@ void GameWorldView::drawTiles(QPainter& painter)
const int rightTile = leftTile + static_cast<int>(std::ceil(viewportWidthTiles())) + 2; const int rightTile = leftTile + static_cast<int>(std::ceil(viewportWidthTiles())) + 2;
const int bottomTile = m_config->world.heightTiles; 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); painter.setPen(Qt::NoPen);
for (int x = leftTile; x <= rightTile; ++x) for (int x = leftTile; x <= rightTile; ++x)
{ {
const QColor& fill = (x < 0) const QColor& fill = (x < 0)
? m_visuals->asteroid.fill ? m_visuals->asteroid.fill
: m_visuals->space.fill; : m_visuals->space.fill;
const bool locked = (x < buildableLeftX);
for (int y = 0; y < bottomTile; ++y) 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 tileHighlight;
QColor selectedOutline; QColor selectedOutline;
QColor copyConfig; QColor copyConfig;
QColor lockedAsteroid;
}; };
struct ToastVisuals 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.tileHighlight = parseColor(requireString(ov, "tile_highlight", "overlays"), "overlays.tile_highlight");
cfg.overlays.selectedOutline = parseColor(requireString(ov, "selected_outline", "overlays"), "overlays.selected_outline"); 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.copyConfig = parseColor(requireString(ov, "copy_config", "overlays"), "overlays.copy_config");
cfg.overlays.lockedAsteroid = parseColor(requireString(ov, "locked_asteroid", "overlays"), "overlays.locked_asteroid");
} }
// Toast // Toast