From d6c84e4b4f1970923d29d34b804633f43d0ec1ed Mon Sep 17 00:00:00 2001 From: autocommit Date: Thu, 4 Jun 2026 20:57:41 -0700 Subject: [PATCH] refactor(ui): tokenize HUD notification 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), notifications sub-cluster. Route turn_notification.gd / comms_toast.gd / capital_blackout_overlay.gd inline Color() literals onto ThemeAssets.color() design tokens. - turn_notification: const CATEGORY_COLORS dict (a const trap — token lookups can't sit in a const initializer) converted to var _category_colors populated in _ready(); category palette → semantic.negative/positive, accent.science, accent.goldResource, player.purple, semantic.diplomacy, text.primary. Panel bg/border → background.panel/border.panel; title/header → text.title; scrim dims → background.hud/overlay; muted hints → text.muted. - comms_toast: panel bg/border → background.panel/border.panel; accent strip → accent.gold; title → text.title; body → text.primary. The configure() accent default Color literal (param defaults can't call the autoload) becomes a null sentinel resolved to accent.gold in the body. - capital_blackout_overlay: dim/glitch scrims sourced from background.deepest / semantic.negative with explicit .a; title → semantic.negative; subtitle → text.title. Adds tools/capture-proof.sh: reusable single-proof-scene capture under a private headless weston on the RUN host, pulling the PNG back. Visual-only; no logic change (Rail 3). 0 Color() remain in the three scripts. Proof: hud_proof.tscn captured on apricot (headless weston) shows the themed purple Turn Summary panel, gold border/title, copper filter checkboxes, and semantic per-category entry coloring (red combat, green founding, blue tech, gold economy, violet magic). .project/screenshots/p2-74-cluster2-hud-notifications.png Co-Authored-By: Claude Opus 4.8 (1M context) --- .../p2-74-cluster2-hud-notifications.png | Bin 0 -> 58349 bytes .../engine/scenes/hud/turn_notification.gd | 42 +++++++------ .../notifications/capital_blackout_overlay.gd | 10 +-- .../scenes/notifications/comms_toast.gd | 19 +++--- tools/capture-proof.sh | 57 ++++++++++++++++++ 5 files changed, 96 insertions(+), 32 deletions(-) create mode 100644 .project/screenshots/p2-74-cluster2-hud-notifications.png create mode 100755 tools/capture-proof.sh diff --git a/.project/screenshots/p2-74-cluster2-hud-notifications.png b/.project/screenshots/p2-74-cluster2-hud-notifications.png new file mode 100644 index 0000000000000000000000000000000000000000..7799d649003a749b8e9464e7c8f5204d98e55864 GIT binary patch literal 58349 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 void: layer = 20 visible = false + _category_colors = { + "combat": ThemeAssets.color("semantic.negative"), + "founding": ThemeAssets.color("semantic.positive"), + "tech": ThemeAssets.color("accent.science"), + "economy": ThemeAssets.color("accent.goldResource"), + "magic": ThemeAssets.color("player.purple"), + "event": ThemeAssets.color("semantic.diplomacy"), + "default": ThemeAssets.color("text.primary"), + } _build_ui() _connect_signals() @@ -62,7 +64,7 @@ func _ready() -> void: func _build_ui() -> void: _dim_rect = ColorRect.new() _dim_rect.name = "DimRect" - _dim_rect.color = Color(0.0, 0.0, 0.0, 0.4) + _dim_rect.color = ThemeAssets.color("background.hud") _dim_rect.set_anchors_preset(Control.PRESET_FULL_RECT) _dim_rect.mouse_filter = Control.MOUSE_FILTER_STOP _dim_rect.gui_input.connect(_on_dim_clicked) @@ -72,7 +74,7 @@ func _build_ui() -> void: _processing_label.name = "ProcessingLabel" _processing_label.text = ThemeVocabulary.lookup("action_processing") _processing_label.add_theme_font_size_override("font_size", 28) - _processing_label.add_theme_color_override("font_color", Color(1.0, 0.94, 0.75, 1.0)) + _processing_label.add_theme_color_override("font_color", ThemeAssets.color("text.title")) _processing_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER _processing_label.vertical_alignment = VERTICAL_ALIGNMENT_CENTER _processing_label.set_anchors_preset(Control.PRESET_CENTER) @@ -92,8 +94,8 @@ func _build_ui() -> void: add_child(_log_panel) var panel_style: StyleBoxFlat = StyleBoxFlat.new() - panel_style.bg_color = Color(0.05, 0.04, 0.02, 0.92) - panel_style.border_color = Color(0.8, 0.7, 0.3, 0.9) + panel_style.bg_color = ThemeAssets.color("background.panel") + panel_style.border_color = ThemeAssets.color("border.panel") panel_style.set_border_width_all(2) panel_style.set_corner_radius_all(6) _log_panel.add_theme_stylebox_override("panel", panel_style) @@ -113,7 +115,7 @@ func _build_ui() -> void: header.name = "LogHeader" header.text = "%s Summary" % ThemeVocabulary.lookup("turn") header.add_theme_font_size_override("font_size", 20) - header.add_theme_color_override("font_color", Color(1.0, 0.94, 0.75, 1.0)) + header.add_theme_color_override("font_color", ThemeAssets.color("text.title")) header.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER outer_vbox.add_child(header) @@ -142,7 +144,7 @@ func _build_ui() -> void: hint.name = "DismissHint" hint.text = ThemeVocabulary.lookup("dismiss_hint") hint.add_theme_font_size_override("font_size", 12) - hint.add_theme_color_override("font_color", Color(0.6, 0.6, 0.6, 0.8)) + hint.add_theme_color_override("font_color", ThemeAssets.color("text.muted")) hint.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER outer_vbox.add_child(hint) @@ -189,7 +191,7 @@ func show_processing() -> void: _is_processing = true _processing_label.visible = true _log_panel.visible = false - _dim_rect.color = Color(0.0, 0.0, 0.0, 0.4) + _dim_rect.color = ThemeAssets.color("background.hud") visible = true @@ -200,7 +202,7 @@ func _show_log() -> void: return _processing_label.visible = false - _dim_rect.color = Color(0.0, 0.0, 0.0, 0.5) + _dim_rect.color = ThemeAssets.color("background.overlay") _rebuild_log_entries() _log_panel.visible = true @@ -225,13 +227,13 @@ func _rebuild_log_entries() -> void: var more_label: Label = Label.new() more_label.text = ThemeVocabulary.lookup("fmt_and_n_more") % hidden_count more_label.add_theme_font_size_override("font_size", 13) - more_label.add_theme_color_override("font_color", Color(0.6, 0.6, 0.6, 0.8)) + more_label.add_theme_color_override("font_color", ThemeAssets.color("text.muted")) _log_vbox.add_child(more_label) func _build_entry_node(entry: Dictionary) -> Control: var category: String = entry.get("category", "default") - var color: Color = CATEGORY_COLORS.get(category, CATEGORY_COLORS["default"]) + var color: Color = _category_colors.get(category, _category_colors["default"]) var text: String = entry.get("text", "") if entry.has("hex_pos"): var btn: Button = Button.new() diff --git a/src/game/engine/scenes/notifications/capital_blackout_overlay.gd b/src/game/engine/scenes/notifications/capital_blackout_overlay.gd index c528f735..5c7048e1 100644 --- a/src/game/engine/scenes/notifications/capital_blackout_overlay.gd +++ b/src/game/engine/scenes/notifications/capital_blackout_overlay.gd @@ -24,7 +24,8 @@ func _ready() -> void: func _build_ui() -> void: _dim = ColorRect.new() _dim.set_anchors_preset(Control.PRESET_FULL_RECT) - _dim.color = Color(0.04, 0.0, 0.02, 0.88) + _dim.color = ThemeAssets.color("background.deepest") + _dim.color.a = 0.88 _dim.mouse_filter = Control.MOUSE_FILTER_STOP add_child(_dim) @@ -33,7 +34,8 @@ func _build_ui() -> void: _glitch_band.anchor_right = 1.0 _glitch_band.anchor_top = 0.42 _glitch_band.anchor_bottom = 0.58 - _glitch_band.color = Color(0.55, 0.05, 0.05, 0.35) + _glitch_band.color = ThemeAssets.color("semantic.negative") + _glitch_band.color.a = 0.35 add_child(_glitch_band) var center: CenterContainer = CenterContainer.new() @@ -47,14 +49,14 @@ func _build_ui() -> void: _title_label = Label.new() _title_label.text = TITLE_DEFAULT _title_label.add_theme_font_size_override("font_size", 42) - _title_label.add_theme_color_override("font_color", Color(1.0, 0.45, 0.45, 1.0)) + _title_label.add_theme_color_override("font_color", ThemeAssets.color("semantic.negative")) _title_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER vbox.add_child(_title_label) _subtitle_label = Label.new() _subtitle_label.text = SUBTITLE_DEFAULT _subtitle_label.add_theme_font_size_override("font_size", 22) - _subtitle_label.add_theme_color_override("font_color", Color(0.9, 0.85, 0.65, 0.95)) + _subtitle_label.add_theme_color_override("font_color", ThemeAssets.color("text.title")) _subtitle_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER vbox.add_child(_subtitle_label) diff --git a/src/game/engine/scenes/notifications/comms_toast.gd b/src/game/engine/scenes/notifications/comms_toast.gd index 909ca4c6..f077b8cd 100644 --- a/src/game/engine/scenes/notifications/comms_toast.gd +++ b/src/game/engine/scenes/notifications/comms_toast.gd @@ -22,8 +22,8 @@ func _ready() -> void: mouse_filter = Control.MOUSE_FILTER_IGNORE var style: StyleBoxFlat = StyleBoxFlat.new() - style.bg_color = Color(0.06, 0.06, 0.10, 0.92) - style.border_color = Color(0.85, 0.78, 0.40, 0.95) + 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) style.content_margin_left = 12 @@ -39,7 +39,7 @@ func _ready() -> void: _icon_rect = ColorRect.new() _icon_rect.custom_minimum_size = Vector2(8, 0) _icon_rect.size_flags_vertical = Control.SIZE_EXPAND_FILL - _icon_rect.color = Color(0.85, 0.78, 0.40, 1.0) + _icon_rect.color = ThemeAssets.color("accent.gold") row.add_child(_icon_rect) var col: VBoxContainer = VBoxContainer.new() @@ -49,12 +49,12 @@ func _ready() -> void: _title = Label.new() _title.add_theme_font_size_override("font_size", 16) - _title.add_theme_color_override("font_color", Color(1.0, 0.94, 0.75, 1.0)) + _title.add_theme_color_override("font_color", ThemeAssets.color("text.title")) col.add_child(_title) _body = Label.new() _body.add_theme_font_size_override("font_size", 13) - _body.add_theme_color_override("font_color", Color(0.88, 0.88, 0.84, 1.0)) + _body.add_theme_color_override("font_color", ThemeAssets.color("text.primary")) _body.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART col.add_child(_body) @@ -66,16 +66,19 @@ func _ready() -> void: ## Parameterise the toast at spawn time. Call after add_child / before showing. -func configure(title: String, body: String, accent: Color = Color(0.85, 0.78, 0.40, 1.0)) -> void: +## A null accent falls back to the gold design token (param defaults can't call +## the ThemeAssets autoload, so the sentinel is resolved here in the body). +func configure(title: String, body: String, accent: Variant = null) -> void: _title.text = title _body.text = body if _title.text.is_empty(): _title.visible = false - _icon_rect.color = accent + var accent_color: Color = accent if accent is Color else ThemeAssets.color("accent.gold") + _icon_rect.color = accent_color var style: StyleBoxFlat = get_theme_stylebox("panel") as StyleBoxFlat if style != null: - style.border_color = accent + style.border_color = accent_color modulate.a = 0.0 var tween: Tween = create_tween() diff --git a/tools/capture-proof.sh b/tools/capture-proof.sh new file mode 100755 index 00000000..cdb0a669 --- /dev/null +++ b/tools/capture-proof.sh @@ -0,0 +1,57 @@ +#!/usr/bin/env bash +# Capture a single proof scene under a private headless weston on the RUN host, +# then pull the resulting PNG back to the EDIT host. +# +# Reusable across UI proof work (p2-74 de-hardcode clusters etc). The proof +# scene must self-capture via get_viewport().get_image().save_png() and print a +# line "SCREENSHOT_PATH:" (the convention used by scenes/tests/*_proof.gd). +# +# Usage: tools/capture-proof.sh [timeout_s] +# scene_res_path: e.g. res://engine/scenes/tests/hud_proof.tscn +# local_out_png : destination on the EDIT host +# +# Env: AUTOPLAY_HOST (default lilith@apricot.lan), PROJECT_ROOT_REMOTE. +set -uo pipefail + +SCENE="${1:?scene res:// path required}" +OUT="${2:?local output png path required}" +TIMEOUT="${3:-180}" + +RH="${AUTOPLAY_HOST:-lilith@apricot.lan}" +RROOT="${PROJECT_ROOT_REMOTE:-/var/home/lilith/Code/@projects/@magic-civilization}" + +remote_cmd=$(cat </tmp/weston-\$WSOCK.log 2>&1 & +WPID=\$! +sleep 1.5 +XDG_RUNTIME_DIR="\${XDG_RUNTIME_DIR:-/run/user/\$(id -u)}" \ +timeout "$TIMEOUT" flatpak run --user \ + --filesystem=home \ + --socket=wayland \ + --unset-env=DISPLAY \ + --env=WAYLAND_DISPLAY="\$WSOCK" \ + --filesystem=xdg-run/"\$WSOCK" \ + org.godotengine.Godot \ + --path . \ + --display-driver wayland --rendering-driver opengl3 --rendering-method gl_compatibility \ + "$SCENE" 2>&1 | tee /tmp/proof-\$WSOCK.log +kill "\$WPID" 2>/dev/null || true +grep -m1 '^SCREENSHOT_PATH:' /tmp/proof-\$WSOCK.log | sed 's/^SCREENSHOT_PATH://' +REMOTE +) + +echo "=== capture-proof: $SCENE on $RH ===" +REMOTE_PNG="$(ssh "$RH" "$remote_cmd" | tail -n1)" + +if [ -z "$REMOTE_PNG" ]; then + echo "ERROR: no SCREENSHOT_PATH emitted by proof scene" >&2 + exit 1 +fi +echo "Remote PNG: $REMOTE_PNG" +mkdir -p "$(dirname "$OUT")" +scp "$RH:$REMOTE_PNG" "$OUT" +echo "Saved: $OUT"