From db309a42366af6a965fa5e5e6d9501bb9430496b Mon Sep 17 00:00:00 2001 From: autocommit Date: Thu, 4 Jun 2026 21:18:44 -0700 Subject: [PATCH] refactor(ui): tokenize HUD overlay colors off raw Color() literals MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit p2-74 cluster 2 (HUD panels + notifications), overlays sub-cluster. Final 6 HUD scripts onto ThemeAssets.color() tokens; completes the cluster-2 fence. - hotkey_sheet: dim → background.overlay; panel → background.panel/border.panel; title/key labels → text.title; group headers → accent.gold; descriptions → text.primary; footer → text.muted; empty rows → text.disabled. - overlay_panel: panel → background.panel/border.divider; active-lens font → semantic.positive; view-center label → text.muted. - chronicle_panel: backdrop scrim → background.overlay. - comms_renderer: dev heartbeat strip → background.hud/border.divider; per-event toast accents → accent.gold/goldResource, semantic.positive/negative/warning, player.purple (first-contact, sighting, blackout, new-capital, vision share, heartbeat sent/missed, envelope tap) — semantic, not inline RGB. - debug_menu: dev panel → background.panel/semantic.diplomacy; button styleboxes → button.bgHover/bgPressed/background.raised + border.panel/focus; font → text.button/buttonHover; find label → text.secondary. - tutorial_overlay: dim → background.overlay; panel → background.panel/border.panel; title → text.title; counter → text.muted; body → text.primary; action badge → semantic.positive (done) / semantic.warning (required). Visual-only; no logic change (Rail 3). 0 inline Color() remain across the entire cluster-2 fence (named hud panels + notifications). All edited scripts compile with autoloads present (GATE_OK). Proof: hotkey_sheet_proof.tscn captured on apricot (headless weston) shows the themed purple panel, gold border/title, gold group headers, primary-text descriptions, and the muted "(no bindings yet)" empty row. .project/screenshots/p2-74-cluster2-hotkey-sheet.png Co-Authored-By: Claude Opus 4.8 (1M context) --- .../p2-74-cluster2-hotkey-sheet.png | Bin 0 -> 63876 bytes src/game/engine/scenes/hud/chronicle_panel.gd | 2 +- src/game/engine/scenes/hud/comms_renderer.gd | 22 +++++++++--------- src/game/engine/scenes/hud/debug_menu.gd | 20 ++++++++-------- src/game/engine/scenes/hud/hotkey_sheet.gd | 20 ++++++++-------- src/game/engine/scenes/hud/overlay_panel.gd | 10 ++++---- .../engine/scenes/hud/tutorial_overlay.gd | 16 ++++++------- 7 files changed, 45 insertions(+), 45 deletions(-) create mode 100644 .project/screenshots/p2-74-cluster2-hotkey-sheet.png diff --git a/.project/screenshots/p2-74-cluster2-hotkey-sheet.png b/.project/screenshots/p2-74-cluster2-hotkey-sheet.png new file mode 100644 index 0000000000000000000000000000000000000000..42b1eedf98d7090b7f33627a0feb39bd2eabfe69 GIT binary patch literal 63876 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 z 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 literal 0 HcmV?d00001 diff --git a/src/game/engine/scenes/hud/chronicle_panel.gd b/src/game/engine/scenes/hud/chronicle_panel.gd index 07ad6b73..fced8811 100644 --- a/src/game/engine/scenes/hud/chronicle_panel.gd +++ b/src/game/engine/scenes/hud/chronicle_panel.gd @@ -68,7 +68,7 @@ func _build_ui() -> void: func _build_background(parent: Control) -> void: _background = ColorRect.new() _background.name = "Background" - _background.color = Color(0.0, 0.0, 0.0, 0.6) + _background.color = ThemeAssets.color("background.overlay") _background.set_anchors_preset(Control.PRESET_FULL_RECT) _background.mouse_filter = Control.MOUSE_FILTER_IGNORE parent.add_child(_background) diff --git a/src/game/engine/scenes/hud/comms_renderer.gd b/src/game/engine/scenes/hud/comms_renderer.gd index abb9af3b..9de737be 100644 --- a/src/game/engine/scenes/hud/comms_renderer.gd +++ b/src/game/engine/scenes/hud/comms_renderer.gd @@ -80,8 +80,8 @@ func _build_ui() -> void: _dev_panel.mouse_filter = Control.MOUSE_FILTER_IGNORE var dev_style: StyleBoxFlat = StyleBoxFlat.new() - dev_style.bg_color = Color(0.0, 0.0, 0.0, 0.65) - dev_style.border_color = Color(0.5, 0.5, 0.5, 0.8) + dev_style.bg_color = ThemeAssets.color("background.hud") + dev_style.border_color = ThemeAssets.color("border.divider") dev_style.set_border_width_all(1) dev_style.content_margin_left = 8 dev_style.content_margin_right = 8 @@ -148,7 +148,7 @@ func _on_player_discovered(payload: Dictionary) -> void: name_str = pn var title: String = str(strings.get("toast_title", "First Contact")) var body: String = str(strings.get("toast_body_fmt", "First contact — %s.")) % name_str - _spawn_toast(title, body, Color(0.85, 0.78, 0.40, 1.0)) + _spawn_toast(title, body, ThemeAssets.color("accent.gold")) func _on_city_spotted(payload: Dictionary) -> void: @@ -160,7 +160,7 @@ func _on_city_spotted(payload: Dictionary) -> void: var fmt: String = str(strings.get("toast_body_fmt", "Spotted %s settlement at (%d, %d).")) var owner_str: String = "Clan %d" % owner_id var body: String = fmt % [owner_str, col_v, row_v] - _spawn_toast(title, body, Color(0.95, 0.85, 0.35, 1.0)) + _spawn_toast(title, body, ThemeAssets.color("accent.goldResource")) func _on_unit_spotted(_payload: Dictionary) -> void: @@ -181,7 +181,7 @@ func _on_capital_blackout_began(payload: Dictionary) -> void: var toast_title: String = str(strings.get("toast_title", "Capital Blackout")) var fmt: String = str(strings.get("toast_body_fmt", "%s's capital has fallen.")) var pname: String = "Clan %d" % affected - _spawn_toast(toast_title, fmt % pname, Color(1.0, 0.45, 0.45, 1.0)) + _spawn_toast(toast_title, fmt % pname, ThemeAssets.color("semantic.negative")) func _on_capital_blackout_ended(payload: Dictionary) -> void: @@ -193,7 +193,7 @@ func _on_capital_blackout_ended(payload: Dictionary) -> void: var title: String = str(strings.get("toast_title", "New Seat of Power")) var fmt: String = str(strings.get("toast_body_fmt", "New seat of power: %s.")) var city_name: String = str(payload.get("new_capital_city_id", "?")) - _spawn_toast(title, fmt % city_name, Color(0.55, 0.95, 0.55, 1.0)) + _spawn_toast(title, fmt % city_name, ThemeAssets.color("semantic.positive")) func _on_envelope_tapped(payload: Dictionary) -> void: @@ -209,7 +209,7 @@ func _on_envelope_tapped(payload: Dictionary) -> void: var fmt: String = str( strings.get("toast_body_fmt", "Beacon at (%d, %d) intercepted enemy comms (%s).") ) - _spawn_toast(title, fmt % [col_v, row_v, pkind], Color(0.55, 0.40, 0.85, 1.0)) + _spawn_toast(title, fmt % [col_v, row_v, pkind], ThemeAssets.color("player.purple")) func _on_heartbeat_sent(payload: Dictionary) -> void: @@ -220,7 +220,7 @@ func _on_heartbeat_sent(payload: Dictionary) -> void: var agid: int = int(payload.get("agreement_id", 0)) var sender: int = int(payload.get("sender", -1)) var recipient: int = int(payload.get("recipient", -1)) - _push_dev_line(fmt % [agid, sender, recipient], Color(0.6, 0.85, 0.6, 1.0)) + _push_dev_line(fmt % [agid, sender, recipient], ThemeAssets.color("semantic.positive")) func _on_heartbeat_missed(payload: Dictionary) -> void: @@ -233,7 +233,7 @@ func _on_heartbeat_missed(payload: Dictionary) -> void: var agid: int = int(payload.get("agreement_id", 0)) var expected: int = int(payload.get("expected_by_turn", 0)) var count: int = int(payload.get("missed_count", 0)) - _push_dev_line(fmt % [agid, expected, count], Color(1.0, 0.55, 0.40, 1.0)) + _push_dev_line(fmt % [agid, expected, count], ThemeAssets.color("semantic.warning")) func _on_vision_share_collapsed(payload: Dictionary) -> void: @@ -243,7 +243,7 @@ func _on_vision_share_collapsed(payload: Dictionary) -> void: var title: String = str(strings.get("toast_title", "Vision Share Severed")) var fmt: String = str(strings.get("toast_body_fmt", "Shared vision with ally collapsed (%s).")) var reason: String = str(payload.get("reason", "unknown")) - _spawn_toast(title, fmt % reason, Color(1.0, 0.55, 0.55, 1.0)) + _spawn_toast(title, fmt % reason, ThemeAssets.color("semantic.negative")) func _on_vision_share_restored(payload: Dictionary) -> void: @@ -252,7 +252,7 @@ func _on_vision_share_restored(payload: Dictionary) -> void: _vision_share_state[agid] = "active" var title: String = str(strings.get("toast_title", "Vision Share Restored")) var body: String = str(strings.get("toast_body_fmt", "Shared vision with ally restored.")) - _spawn_toast(title, body, Color(0.55, 0.95, 0.55, 1.0)) + _spawn_toast(title, body, ThemeAssets.color("semantic.positive")) # -- Render helpers ---------------------------------------------------------- diff --git a/src/game/engine/scenes/hud/debug_menu.gd b/src/game/engine/scenes/hud/debug_menu.gd index ba7d5a62..847ac84e 100644 --- a/src/game/engine/scenes/hud/debug_menu.gd +++ b/src/game/engine/scenes/hud/debug_menu.gd @@ -83,8 +83,8 @@ func _on_turn_during_advance(turn_number: int, player_index: int) -> void: func _apply_panel_style() -> void: var style: StyleBoxFlat = StyleBoxFlat.new() - style.bg_color = Color(0.08, 0.04, 0.04, 0.85) - style.border_color = Color(0.7, 0.4, 0.25, 0.8) + style.bg_color = ThemeAssets.color("background.panel") + style.border_color = ThemeAssets.color("semantic.diplomacy") style.set_border_width_all(1) style.set_corner_radius_all(4) add_theme_stylebox_override("panel", style) @@ -92,23 +92,23 @@ func _apply_panel_style() -> void: func _apply_button_style(btn: Button) -> void: var normal: StyleBoxFlat = StyleBoxFlat.new() - normal.bg_color = Color(0.12, 0.06, 0.04, 0.8) - normal.border_color = Color(0.65, 0.35, 0.2, 0.7) + normal.bg_color = ThemeAssets.color("button.bgHover") + normal.border_color = ThemeAssets.color("border.panel") normal.set_border_width_all(1) normal.set_corner_radius_all(4) var hover: StyleBoxFlat = normal.duplicate() - hover.bg_color = Color(0.18, 0.09, 0.06, 0.9) - hover.border_color = Color(0.8, 0.5, 0.3, 0.9) + hover.bg_color = ThemeAssets.color("button.bgPressed") + hover.border_color = ThemeAssets.color("border.focus") var pressed_style: StyleBoxFlat = normal.duplicate() - pressed_style.bg_color = Color(0.06, 0.03, 0.02, 0.9) + pressed_style.bg_color = ThemeAssets.color("background.raised") btn.add_theme_stylebox_override("normal", normal) btn.add_theme_stylebox_override("hover", hover) btn.add_theme_stylebox_override("pressed", pressed_style) - btn.add_theme_color_override("font_color", Color(0.9, 0.7, 0.5, 1.0)) - btn.add_theme_color_override("font_hover_color", Color(1.0, 0.85, 0.65, 1.0)) + btn.add_theme_color_override("font_color", ThemeAssets.color("text.button")) + btn.add_theme_color_override("font_hover_color", ThemeAssets.color("text.buttonHover")) func _build_find_ui() -> void: @@ -142,7 +142,7 @@ func _build_find_ui() -> void: _find_label = Label.new() _find_label.text = "" _find_label.add_theme_font_size_override("font_size", 12) - _find_label.add_theme_color_override("font_color", Color(0.8, 0.7, 0.5)) + _find_label.add_theme_color_override("font_color", ThemeAssets.color("text.secondary")) row.add_child(_find_label) var vbox: VBoxContainer = null diff --git a/src/game/engine/scenes/hud/hotkey_sheet.gd b/src/game/engine/scenes/hud/hotkey_sheet.gd index 3b036efd..ff81f0b0 100644 --- a/src/game/engine/scenes/hud/hotkey_sheet.gd +++ b/src/game/engine/scenes/hud/hotkey_sheet.gd @@ -45,7 +45,7 @@ func _ready() -> void: func _build_ui() -> void: var dim: ColorRect = ColorRect.new() - dim.color = Color(0.0, 0.0, 0.0, 0.55) + dim.color = ThemeAssets.color("background.overlay") dim.anchor_right = 1.0 dim.anchor_bottom = 1.0 dim.mouse_filter = Control.MOUSE_FILTER_STOP @@ -78,7 +78,7 @@ func _build_ui() -> void: var title: Label = Label.new() title.text = ThemeVocabulary.lookup("hotkey_sheet_title") title.add_theme_font_size_override("font_size", 24) - title.add_theme_color_override("font_color", Color(0.95, 0.82, 0.3)) + title.add_theme_color_override("font_color", ThemeAssets.color("text.title")) vbox.add_child(title) _grid = GridContainer.new() @@ -93,7 +93,7 @@ func _build_ui() -> void: var footer: Label = Label.new() footer.text = ThemeVocabulary.lookup("hotkey_sheet_footer") footer.add_theme_font_size_override("font_size", 12) - footer.add_theme_color_override("font_color", Color(0.7, 0.65, 0.45, 0.9)) + footer.add_theme_color_override("font_color", ThemeAssets.color("text.muted")) footer.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER vbox.add_child(footer) @@ -192,7 +192,7 @@ func _add_group_header(grid: GridContainer, text: String) -> void: var header: Label = Label.new() header.text = text header.add_theme_font_size_override("font_size", 15) - header.add_theme_color_override("font_color", Color(0.9, 0.75, 0.35)) + header.add_theme_color_override("font_color", ThemeAssets.color("accent.gold")) grid.add_child(header) @@ -200,13 +200,13 @@ func _add_row(grid: GridContainer, keys: String, description: String) -> void: var key_label: Label = Label.new() key_label.text = keys key_label.add_theme_font_size_override("font_size", 13) - key_label.add_theme_color_override("font_color", Color(0.95, 0.85, 0.55)) + key_label.add_theme_color_override("font_color", ThemeAssets.color("text.title")) key_label.custom_minimum_size = Vector2(140, 0) grid.add_child(key_label) var desc_label: Label = Label.new() desc_label.text = description desc_label.add_theme_font_size_override("font_size", 13) - desc_label.add_theme_color_override("font_color", Color(0.85, 0.8, 0.72)) + desc_label.add_theme_color_override("font_color", ThemeAssets.color("text.primary")) grid.add_child(desc_label) @@ -214,13 +214,13 @@ func _add_empty_row(grid: GridContainer) -> void: var left: Label = Label.new() left.text = "—" left.add_theme_font_size_override("font_size", 13) - left.add_theme_color_override("font_color", Color(0.55, 0.5, 0.4)) + left.add_theme_color_override("font_color", ThemeAssets.color("text.disabled")) left.custom_minimum_size = Vector2(140, 0) grid.add_child(left) var right: Label = Label.new() right.text = ThemeVocabulary.lookup("hotkey_group_empty") right.add_theme_font_size_override("font_size", 13) - right.add_theme_color_override("font_color", Color(0.55, 0.5, 0.4)) + right.add_theme_color_override("font_color", ThemeAssets.color("text.disabled")) grid.add_child(right) @@ -255,8 +255,8 @@ func _unhandled_input(event: InputEvent) -> void: func _apply_panel_style(panel: PanelContainer) -> void: var style: StyleBoxFlat = StyleBoxFlat.new() - style.bg_color = Color(0.06, 0.05, 0.09, 0.96) - style.border_color = Color(0.6, 0.45, 0.12, 0.9) + style.bg_color = ThemeAssets.color("background.panel") + style.border_color = ThemeAssets.color("border.panel") style.set_border_width_all(2) style.set_corner_radius_all(6) panel.add_theme_stylebox_override("panel", style) diff --git a/src/game/engine/scenes/hud/overlay_panel.gd b/src/game/engine/scenes/hud/overlay_panel.gd index ba3fcb74..e366d363 100644 --- a/src/game/engine/scenes/hud/overlay_panel.gd +++ b/src/game/engine/scenes/hud/overlay_panel.gd @@ -110,7 +110,7 @@ func _build_view_center_section() -> void: var view_label: Label = Label.new() view_label.text = ThemeVocabulary.lookup("view_center") view_label.add_theme_font_size_override("font_size", 10) - view_label.add_theme_color_override("font_color", Color(0.7, 0.65, 0.45, 0.9)) + view_label.add_theme_color_override("font_color", ThemeAssets.color("text.muted")) add_child(view_label) _btn_view_equator = Button.new() @@ -196,8 +196,8 @@ func _update_button_states() -> void: func _set_active(btn: Button, active: bool) -> void: if active: - btn.add_theme_color_override("font_color", Color(0.15, 0.9, 0.4, 1.0)) - btn.add_theme_color_override("font_pressed_color", Color(0.15, 0.9, 0.4, 1.0)) + btn.add_theme_color_override("font_color", ThemeAssets.color("semantic.positive")) + btn.add_theme_color_override("font_pressed_color", ThemeAssets.color("semantic.positive")) else: btn.remove_theme_color_override("font_color") btn.remove_theme_color_override("font_pressed_color") @@ -219,8 +219,8 @@ func _update_view_button_states() -> void: func _apply_panel_style() -> void: var style: StyleBoxFlat = StyleBoxFlat.new() - style.bg_color = Color(0.05, 0.05, 0.08, 0.82) - style.border_color = Color(0.25, 0.22, 0.12, 0.85) + style.bg_color = ThemeAssets.color("background.panel") + style.border_color = ThemeAssets.color("border.divider") style.set_border_width_all(1) style.set_corner_radius_all(3) add_theme_stylebox_override("panel", style) diff --git a/src/game/engine/scenes/hud/tutorial_overlay.gd b/src/game/engine/scenes/hud/tutorial_overlay.gd index de1be0cd..61b4da77 100644 --- a/src/game/engine/scenes/hud/tutorial_overlay.gd +++ b/src/game/engine/scenes/hud/tutorial_overlay.gd @@ -78,7 +78,7 @@ func _exit_tree() -> void: func _build_ui() -> void: var dim: ColorRect = ColorRect.new() dim.name = "Dim" - dim.color = Color(0.0, 0.0, 0.0, 0.55) + dim.color = ThemeAssets.color("background.overlay") dim.anchor_right = 1.0 dim.anchor_bottom = 1.0 ## p0-33: must PASS so the dim overlay does not eat clicks meant for the @@ -113,17 +113,17 @@ func _build_ui() -> void: _title_label = Label.new() _title_label.add_theme_font_size_override("font_size", 24) - _title_label.add_theme_color_override("font_color", Color(0.95, 0.82, 0.3)) + _title_label.add_theme_color_override("font_color", ThemeAssets.color("text.title")) vbox.add_child(_title_label) _step_counter_label = Label.new() _step_counter_label.add_theme_font_size_override("font_size", 12) - _step_counter_label.add_theme_color_override("font_color", Color(0.7, 0.65, 0.45, 0.9)) + _step_counter_label.add_theme_color_override("font_color", ThemeAssets.color("text.muted")) vbox.add_child(_step_counter_label) _body_label = Label.new() _body_label.add_theme_font_size_override("font_size", 15) - _body_label.add_theme_color_override("font_color", Color(0.88, 0.82, 0.72)) + _body_label.add_theme_color_override("font_color", ThemeAssets.color("text.primary")) _body_label.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART _body_label.size_flags_vertical = Control.SIZE_EXPAND_FILL vbox.add_child(_body_label) @@ -180,9 +180,9 @@ func _render_step() -> void: func _render_action_badge(prefix: String) -> void: if _step_satisfied: _action_badge.text = ThemeVocabulary.lookup("tutorial_action_done") - _action_badge.add_theme_color_override("font_color", Color(0.55, 0.9, 0.55)) + _action_badge.add_theme_color_override("font_color", ThemeAssets.color("semantic.positive")) return - _action_badge.add_theme_color_override("font_color", Color(0.95, 0.7, 0.35)) + _action_badge.add_theme_color_override("font_color", ThemeAssets.color("semantic.warning")) var action_hint: String = ThemeVocabulary.lookup("%s_action" % prefix) var header: String = ThemeVocabulary.lookup("tutorial_action_required") _action_badge.text = ThemeVocabulary.lookup("fmt_tutorial_badge") % [header, action_hint] @@ -275,8 +275,8 @@ func _unhandled_key_input(event: InputEvent) -> void: func _apply_panel_style(panel: PanelContainer) -> void: var style: StyleBoxFlat = StyleBoxFlat.new() - style.bg_color = Color(0.06, 0.05, 0.09, 0.96) - style.border_color = Color(0.6, 0.45, 0.12, 0.9) + style.bg_color = ThemeAssets.color("background.panel") + style.border_color = ThemeAssets.color("border.panel") style.set_border_width_all(2) style.set_corner_radius_all(6) panel.add_theme_stylebox_override("panel", style)