Tint not-yet-buildable asteroid area

Asteroid columns left of the buildable edge (x < -currentAsteroidWidth)
are reachable by the camera but not yet unlocked by expansion. Paint a
semi-transparent grey overlay over them so the locked area reads as
distinct from the buildable asteroid. The tint colour is config-driven
via overlays.locked_asteroid, matching the other overlay visuals.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DZR44tA8sn4dPqDzAVXyps
This commit is contained in:
2026-07-13 21:38:37 +02:00
parent 25cb23f66c
commit f1c77affae
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
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)
locked_asteroid = "#0000007f" # tint over the asteroid left of the buildable edge (not yet unlocked by expansion)
# -----------------------------------------------------------------------------
# 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 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