Commit Graph

179 Commits

Author SHA1 Message Date
128bf81467 re-cover copy-settings through single-building blueprints
The Shift copy gesture removed in 648241b comes back as a property of
blueprint placement rather than a gesture of its own, reusing the C / V
shortcuts: capture one configured building with C, then click same-type
buildings to stamp its settings onto them.

REQ-UI-BLUEPRINT-TRANSFER (new): a single-building blueprint of a
configurable type (Miner, Assembler, Shipyard, Splitter) whose ghost
exactly coincides with a same-type building is a transfer target, drawn in
a distinct colour. Clicking mirrors the source's settings onto it -- placing
nothing, charging nothing, rotating nothing. The mirror includes the
absence of a setting, so a splitter captured without filters clears the
target's. Target rotation is irrelevant, since a transfer never rotates.

REQ-UI-BLUEPRINT-OVERLAP (new): blueprint placement no longer rotates
anything in place, so REQ-BLD-ROTATE-IN-PLACE is now builder-mode only.
Instead a ghost coinciding with a same-type, same-rotation building is a
compatible overlap: valid, ordinary ghost colour, and that building is left
untouched while the rest of the constellation is placed around it. Without
this a blueprint dropped over a partial copy of itself would be blocked
outright, since placement is all-or-nothing. Tunnels are included -- their
rotate-in-place exception existed only because rotation was involved.

REQ-MAT-INPUT-BUFFER gains the rule that setting a configuration to the
value it already holds is a no-op, whatever path applies it. setRecipe
already behaves this way; setShipLayout does not, and clearing a shipyard
on an identical layout already contradicted REQ-BLD-SHIPYARD's "confirms a
layout change". The transfer inherits the rule per field, so re-clicking
already-matching buildings costs no buffers or construction progress.

Also fixes a stale claim in REQ-BLD-ROTATE-IN-PLACE that a coinciding
tunnel ghost is "skipped" in blueprint mode; it has always been invalid.

Requirements only; no code implements this yet.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcReq7hVk4KUPhTDKWAG7K
2026-08-06 17:13:44 +02:00
648241ba2a remove the Shift copy-building-settings gesture
REQ-BLD-COPY-CONFIG is dropped: Shift+right-click no longer caches a
building's recipe / schematic+layout / splitter filters, Shift+left-click
no longer stamps them onto same-type buildings, and the cyan eligible-
target tint and copy/paste flashes go with them. Shift+left-click now
falls through to normal selection, which needs no code of its own -- only
Ctrl is meaningful to selection (REQ-UI-MULTI-SELECT), so dropping the
branch that consumed the click is enough.

readBuildingConfig stays. It had two callers, and the other one is
captureBlueprintFromSelection, which needs it to record each blueprint
building's configuration (REQ-UI-BLUEPRINT-STORAGE). Its five tests stay
too, retagged [blueprint] and rewritten to name the caller that is left.

The visuals.toml copy_config colour is removed together with its
VisualsConfig field and its loader line: overlay keys are mandatory, so
those three have to move as one or startup aborts.

REQ-BLD-COPY-CONFIG-FEEDBACK, cited by four of these files and by the TOML
comment, never existed in requirements.md; deleting the citations retires
a dangling id.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcReq7hVk4KUPhTDKWAG7K
2026-08-06 16:21:53 +02:00
f9c654b148 rekey the temporary blueprint to C, add V to re-place it
REQ-UI-BLUEPRINT-TEMP moves off T onto C, mirroring the Ctrl+C / Ctrl+V
pair it is the throwaway counterpart of. V re-enters placement mode for
the last temporary blueprint without capturing anything new, and does
nothing when none exists.

This forces a lifetime change: the blueprint can no longer be discarded
when placement mode is left, or V would only ever work between a C press
and the first right-click. It now survives mode exit, is replaced only by
the next C, and is discarded on application close and on Restart.

Requirements only; the code still binds T and still discards on exit.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcReq7hVk4KUPhTDKWAG7K
2026-08-06 14:30:51 +02:00
d2d93347ad move blueprints out of the sidebar into Ctrl+C / Ctrl+V dialogs
The blueprint panel leaves the side panel column, which now holds the
selected building panel alone at full height. Saving a blueprint moves to
Ctrl+C on the current selection, and picking one for placement moves to a
new modal blueprint selection dialog opened with Ctrl+V (and directly after
a confirmed save).

REQ-UI-BLUEPRINT-PANEL is retired in favour of REQ-UI-BLUEPRINT-DIALOG, and
REQ-UI-BLUEPRINT-BUTTON becomes REQ-UI-BLUEPRINT-CARD. Neither id is cited
from code. REQ-UI-BLUEPRINT-CREATE keeps its id -- its six code citations
are about which buildings a capture counts, which is unchanged.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcReq7hVk4KUPhTDKWAG7K
2026-08-06 10:20:55 +02:00
af410ee4de make the build hotkey badge legible
The shift glyph U+21E7 was not covered by the UI font and rendered as an
unrecognizable substitute, and the badge sat two points below the button font,
which made it hard to read even where the glyph was fine. Use U+2191, a plain
single-stroke arrow the standard fonts do carry, and draw the badge at the full
button font in bold. It stays dimmed, so it still reads as secondary to the cost.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcReq7hVk4KUPhTDKWAG7K
2026-08-06 08:27:00 +02:00
57ab63202f float the build buttons as a bar over the game world
Implements the REQ-UI-BUILD-BAR rewrite: the build buttons leave the side
panel column for a widget floating at the bottom center of the game world
view, as one non-wrapping row. BuildButtonGrid is renamed BuildButtonBar and
its QGridLayout becomes a QHBoxLayout; the side panel column is left with two
equal-height panels.

Buttons become icon-only. Each face is composed into a single pixmap per
QIcon mode - hotkey badge in the top-left corner, chip icon centered, cost
and block icon below - because a QPushButton holds only one icon. That
replaces the custom-painted BuildButton and lets Qt grey an unaffordable
button by swapping the pixmap. The building name moves into the tooltip,
which now always leads with it, and a missing chip SVG falls back to the name
in the chip's place.

The badge labels come from InputMapper, searched out of the same table the
key handler uses so a badge cannot claim a key that does nothing. The
Deconstruct button has no cost, so it shows its name there instead, and sits
last behind a gap.

Parenting the bar to MainWindow makes creation order the stacking order: it
lands above the world view and its vignettes and below the modal dim, and Qt
routes mouse events to it rather than the world, which is the whole input
clause of REQ-UI-BUILD-BAR at no cost.

Requirements are amended for the two things the mockup added: the hotkey
badge and the Deconstruct caption.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcReq7hVk4KUPhTDKWAG7K
2026-08-06 08:12:38 +02:00
dbabc3a563 float the build buttons as a horizontal bar over the game world
Renames REQ-UI-BUILD-GRID to REQ-UI-BUILD-BAR: the build buttons move out
of the side panel column into a widget floating at the bottom center of the
game world view, as a single non-wrapping row. Buttons become icon-only with
a cost, so the building name moves into the hover tooltip and the missing-icon
fallback becomes a name caption. Deconstruct is the last entry, separated by
a gap. The side panel column is now two equal-height panels.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JcReq7hVk4KUPhTDKWAG7K
2026-08-06 07:09:40 +02:00
f39fe9a118 move the debug stats panel out of the renderer 2026-08-05 22:14:55 +02:00
e5dcb9de5f extract WorldRenderer 2026-08-05 22:14:55 +02:00
3a1951559d share the world shapes both views (game and balancing) draw identically 2026-08-05 22:14:54 +02:00
f6df95abb2 extract the scroll position into WorldCamera 2026-08-05 22:14:52 +02:00
fa9dbd62ad use WorldCoordinates in ArenaView too 2026-08-05 22:14:52 +02:00
2af09d9eb1 extract the world<->widget transform into WorldCoordinates 2026-08-05 22:14:52 +02:00
64c344c3a3 correct the belt subsystem interface description in architecture.md 2026-08-04 18:12:02 +02:00
79b79ab7c3 Show building_block icon in header stock, expand button and build costs 2026-07-23 21:13:37 +02:00
f766ae4a86 Allow to draw produced-item icons in recipe dialog and game world 2026-07-23 20:54:04 +02:00
8b71fe1a03 Rename ship/station scrap drop entities to "debris" 2026-07-23 20:51:05 +02:00
11daa61714 Add refund-percentage tooltip to Deconstruct button 2026-07-23 20:46:39 +02:00
60d6767d93 draw building icons in the game world 2026-07-23 20:45:50 +02:00
7c1455b8a0 add icons for build buttons 2026-07-22 21:44:20 +02:00
e20a0bba67 Rename Demolish to Deconstruct 2026-07-22 21:40:42 +02:00
b2ce20e6ad Add deconstruction queue 2026-07-22 21:37:56 +02:00
a9082c57f3 Implement config-driven unlock groups so that multiple things can be unlocked at once (including buildings) 2026-07-22 21:34:59 +02:00
a8a6a04f1e Highlight tunnel connections in green when selected 2026-07-21 21:16:21 +02:00
a75222f111 Never rotate tunnels in place 2026-07-21 21:14:27 +02:00
9b63af6ccb Unify tunnel build mode into a single Tunnel button 2026-07-21 21:12:06 +02:00
4ca5b332cd Snap belt-drag end tile to a building's input edge 2026-07-21 21:09:07 +02:00
0c4eb480be Update belt drag L-path immediately on rotate 2026-07-21 21:06:54 +02:00
b2c1ea34fd Implement deferred L-shaped belt drag placement 2026-07-21 21:05:31 +02:00
1cbc695bc5 Add building status light 2026-07-20 22:19:58 +02:00
c7ecce6ac4 make empty layout cells pulse while module is selected 2026-07-20 22:15:26 +02:00
be475e2836 allow multi-select for ships/stations, mixable with scrap 2026-07-20 21:03:11 +02:00
1cdafb7bcd draw glyph for output port at the target tile during build mode 2026-07-19 22:30:03 +02:00
f205136e21 show tooltip for artifacts in the header bar 2026-07-19 22:16:04 +02:00
b708e1b29d Add demolish-mode vignette 2026-07-19 21:51:12 +02:00
c76ba07bc7 Correct top game speed step to 10x in requirements 2026-07-19 21:37:47 +02:00
b2e7e4897a Add paused-state vignette border to game world view 2026-07-19 21:34:56 +02:00
c21af63e84 deselect build tool when it becomes unaffordable and fix stale enabled button 2026-07-19 21:20:59 +02:00
9c1e948ab4 show selected ship's current behavior in sidebar panel 2026-07-14 21:19:14 +02:00
486296feee Allow direct output-to-input port coupling between adjacent buildings 2026-07-14 20:23:24 +02:00
c9f14970a1 Animate items entering building input ports 2026-07-14 20:21:25 +02:00
6a8c456aa1 Animate items emerging from building output ports 2026-07-14 20:18:47 +02:00
af8a2224c0 fix issue where items were accepted by a belt from opposite travel direction 2026-07-14 20:15:39 +02:00
4b149d97a7 dim the game behind dialogs and escape menu 2026-07-13 22:11:21 +02:00
535d4f8f24 allow to (multi) select scrap 2026-07-13 21:09:01 +02:00
8c4fb78fc9 Allow creating blueprints from construction sites 2026-07-13 20:50:13 +02:00
698dd4d13d auto-open layout dialog on manual schematic change 2026-07-13 20:47:37 +02:00
9d28175b17 Always show shipyard layout preview and Configure button, disabled until schematic selected 2026-07-13 20:45:03 +02:00
69fe607157 Show total building block cost in multi-selection panel (relevant for temporary blueprint) 2026-07-13 20:31:40 +02:00
ad3e73fdd8 Add tooltip for building blocks in header bar 2026-07-12 21:24:11 +02:00