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
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
dc83add5c6
move two placement queries out of the view into PlacementRules
2026-08-05 22:14:54 +02:00
3a1951559d
share the world shapes both views (game and balancing) draw identically
2026-08-05 22:14:54 +02:00
26d7448492
extract BuildModeController, fixing a silent blueprint exit
2026-08-05 22:14:54 +02:00
202f583067
extract SelectionController
2026-08-05 22:14:54 +02:00
d5ab44b9bf
move the remaining hotkeys into the InputMapper
2026-08-05 22:14:53 +02:00
bb1ffab8fc
fix a bug where view continues to pan when window lost focus while panning
2026-08-05 22:14:53 +02:00
e1445fe508
move the already-event-driven hotkeys into the InputMapper
2026-08-05 22:14:53 +02:00
caa810f66d
move pan input into an InputMapper
2026-08-05 22:14:53 +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
949937d2c2
re-use PlacementFixture in BuildingTests
2026-08-05 07:53:08 +02:00
4c166bf47f
depend on the registry instead of DebrisSystem in the AI path
2026-08-05 07:25:59 +02:00
60260540cd
make deconstruction its own system
2026-08-05 07:10:46 +02:00
1f4503176b
make construction its own system (extracted from BuildingSystem)
2026-08-05 06:57:12 +02:00
fd85e8e10a
free the buffer setup and belt registration from BuildingSystem
2026-08-05 06:55:13 +02:00
114a43b205
make BuildingSystem stateless: FactoryState becomes a parameter
2026-08-05 06:50:11 +02:00
d87d063b10
move the placement rules and the config-dependent queries off BuildingSystem
2026-08-05 06:49:49 +02:00
537597c854
delete the unused getAllBeltTiles and BeltTileInfo
2026-08-05 06:49:28 +02:00
9c3be0fbd0
extract the production rules as free functions over config and building
2026-08-05 06:49:15 +02:00
58b94223f7
migrate every factory query off BuildingSystem onto the free functions
2026-08-05 06:46:13 +02:00
1fb63cce4e
move the asteroid width bound into FactoryState
2026-08-05 06:45:33 +02:00
0b7e94b4e4
drop CombatSystem's unused BuildingSystem parameter
2026-08-05 06:45:16 +02:00
0408336cf9
depend on factory data instead of BuildingSystem in the AI path
2026-08-05 06:44:49 +02:00
46932e4abf
move FactoryState ownership out of BuildingSystem to Simulation
2026-08-05 06:43:52 +02:00
0edea5d961
gather the factory's world data into FactoryState
2026-08-05 06:43:30 +02:00
60cc187d92
add BuildingGrid to manage tile occupancy
2026-08-04 18:26:01 +02:00
3990351a16
share BuildingSystem's free functions instead of copying them
2026-08-04 18:24:38 +02:00
bd344e4fbe
add FieldSelectionPanel for extracting the ships/stations/debris selection
2026-08-04 18:23:28 +02:00
5d4a975384
cover unlock state in the determinism tests
2026-08-04 18:11:03 +02:00
475df0e5fd
extract unlock state from Simulation to UnlockState class
2026-08-04 18:10:43 +02:00
61634f6fd2
move the shared TOML helpers into the utility namespace to avoid name collisions
2026-08-04 18:05:52 +02:00
c8ff7da345
extract load methods into their own files
2026-08-04 18:05:27 +02:00
d664ab54cc
extract shared TOML helpers into TomlHelpers.h/.cpp
2026-08-04 18:02:23 +02:00
906000b0e9
drop the dead payloads from the state-change events
2026-08-03 22:02:47 +02:00
d9ef6aa728
make HeaderBar read the tick, artifacts and boss wave from the simulation instead of event
2026-08-03 22:02:19 +02:00
b44a85685e
make BlueprintPanel read the block stock from the simulation instead of event
2026-08-03 22:02:05 +02:00
edd1c31785
remove duplicate findModuleDef from ShipLayoutPreview
2026-08-03 22:00:25 +02:00
785ce3ebfe
remove duplicate findBuildingDef from BuildingSystem
2026-08-03 21:14:13 +02:00
7017f8b4dc
route the win-path restart through ResetCommand
2026-08-03 21:13:43 +02:00
77a842f884
dedupe AttackExecutor and RepairExecutor via executeOrbitAndAssign
2026-08-03 21:13:24 +02:00
d5ba72d554
add ModalPauseScope for the pause-around-modal idiom
2026-08-03 21:11:52 +02:00
83177729e9
extract MainWindow::reloadConfig
2026-08-03 21:11:02 +02:00
a8e933b7f2
drop EntityAdmin::add in favour of addComponent
2026-08-03 21:09:18 +02:00
e02e323cb2
share a single ItemIconCache across the UI
2026-08-03 21:08:19 +02:00
b4e622daa5
extract the shared Centroid helper into ai/Centroid.h
2026-08-03 21:06:06 +02:00
1150985c1f
share one loadTestConfig() helper across the tests
2026-08-03 21:05:28 +02:00