From ba52171b70fc7174cfee85ec7bbe8cc81fffc48f Mon Sep 17 00:00:00 2001 From: autocommit Date: Thu, 4 Jun 2026 19:58:12 -0700 Subject: [PATCH] refactor(ui): tokenize statistics modal colors off raw Color() literals MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit p2-74 cluster 1 (modals + menus). Route statistics.gd's 23 inline Color() literals onto ThemeAssets.color() design tokens: panel bg/border → background.panel/border.panel, title → text.title, body/muted/disabled text roles, rank-badge gradient → semantic.positive/warning/diplomacy/negative, score value → accent.goldResource, trend arrows → semantic.positive/negative, backdrop → background.overlay. Converted const RANK_COLORS → var _rank_colors populated in _ready() (token lookups can't sit in a const initializer). Data-driven clan/player line colors left intact. Visual-only; no logic change. Proof: statistics_proof.tscn captured on apricot (weston headless) shows the themed purple panels, gold borders/title, and semantic rank coloring. Co-Authored-By: Claude Opus 4.8 (1M context) --- ...p2-74-cluster1-statistics_demographics.png | Bin 0 -> 27397 bytes .../p2-74-cluster1-statistics_graphs.png | Bin 0 -> 22658 bytes .../p2-74-cluster1-statistics_rankings.png | Bin 0 -> 26212 bytes .../engine/scenes/statistics/statistics.gd | 63 +++++++++--------- 4 files changed, 33 insertions(+), 30 deletions(-) create mode 100644 .project/screenshots/p2-74-cluster1-statistics_demographics.png create mode 100644 .project/screenshots/p2-74-cluster1-statistics_graphs.png create mode 100644 .project/screenshots/p2-74-cluster1-statistics_rankings.png diff --git a/.project/screenshots/p2-74-cluster1-statistics_demographics.png b/.project/screenshots/p2-74-cluster1-statistics_demographics.png new file mode 100644 index 0000000000000000000000000000000000000000..ecaf6f775ee1e490f1376f5e2514ad3185e9f64b GIT binary patch literal 27397 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 H{OkV!vsKci literal 0 HcmV?d00001 diff --git a/.project/screenshots/p2-74-cluster1-statistics_graphs.png b/.project/screenshots/p2-74-cluster1-statistics_graphs.png new file mode 100644 index 0000000000000000000000000000000000000000..964f3933d7f53debc438961dc8f46f3ff0f2f53b GIT binary patch literal 22658 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 literal 0 HcmV?d00001 diff --git a/.project/screenshots/p2-74-cluster1-statistics_rankings.png b/.project/screenshots/p2-74-cluster1-statistics_rankings.png new file mode 100644 index 0000000000000000000000000000000000000000..68b481242660b3ebd7ee25960fca473292420fce GIT binary patch literal 26212 zcmd?QWmFv7);3C%5C~*Lf&|OP2~Oi0A-E)v1b1lMwQ&g$Jh(&f9UK}7H13Uca2l6x z2ri9V-{PF)ocrhA@xI@$JI1XsG73Vis#SB&HJ@ibYgXtxWtm40pFPCE!FePnE2WBq za}W6O_Rk0RffK@e?h|mj<)kX}8mDZCY8?mXIgXsvs}Jt!TXSaVRO1;t`}%8QAaP-{ zNJr_r{&ydKF*m+b%hN67IeF}nbW}5$whOka@IEOMyePY45U7;+;P&5tKPETD3yP7B za~jHcbL7p#%}rYM`8K^Y;v}P?sQ9|DVKpcdA-rZ+g|uds`g52_^QySrqWg0=F0tS| z`Rn(Q()I)=?91OdCbH*=c3Vab=uxVi3UgC+dmeR_(CifxU_#aM#Hi}q28PY=k5SlgQrL4 zt-n))!hej3`BpF5p1HC@-tDZ;d!;ClwjCS&W|9N(e9k!cd%yf74nypyZpKdL)Y4MR;f3~{-|CDi&ney-I%exQ30{p$B6 zCf#_S2To@b*Ex-+br0Z4NE132_-?=-fAeDUR7sGCd}Up~KL+6BLErnj6a+!j&f0I; ztA*{nB7YYhJ*xVj7;(hYnG&K;gf4 zd%CVC%hcq2JR`ZMozt}pj;eFltbeyZvHlA$^tXL<=yV7l1dl&iQO*57ib^va*x

  • 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 JzP|p$zW^m7Az}ak literal 0 HcmV?d00001 diff --git a/src/game/engine/scenes/statistics/statistics.gd b/src/game/engine/scenes/statistics/statistics.gd index 9fe87e89..7fee46c3 100644 --- a/src/game/engine/scenes/statistics/statistics.gd +++ b/src/game/engine/scenes/statistics/statistics.gd @@ -30,13 +30,10 @@ const TAB_RANKINGS: int = 2 const TAB_REPLAY: int = 3 const TAB_HISTORIES: int = 4 -## Rank-badge colours, highest → lowest. -const RANK_COLORS: Array[Color] = [ - Color(0.3, 0.9, 0.4), - Color(0.9, 0.85, 0.3), - Color(0.9, 0.6, 0.2), - Color(0.9, 0.3, 0.3), -] +## Rank-badge colours, highest → lowest. Routed through semantic design tokens +## (good → warning → diplomacy → bad); populated in _ready() because token lookups +## are autoload calls and cannot appear in a const initializer. +var _rank_colors: Array[Color] = [] ## Active tab index. var _current_tab: int = 0 @@ -69,6 +66,12 @@ var _close_button: Button = null func _ready() -> void: + _rank_colors = [ + ThemeAssets.color("semantic.positive"), + ThemeAssets.color("semantic.warning"), + ThemeAssets.color("semantic.diplomacy"), + ThemeAssets.color("semantic.negative"), + ] _build_modal() _restore_last_tab() _refresh_current_tab() @@ -83,7 +86,7 @@ func _build_modal() -> void: var backdrop: ColorRect = ColorRect.new() backdrop.name = "Backdrop" backdrop.set_anchors_preset(Control.PRESET_FULL_RECT) - backdrop.color = Color(0.0, 0.0, 0.0, 0.72) + backdrop.color = ThemeAssets.color("background.overlay") backdrop.mouse_filter = Control.MOUSE_FILTER_STOP add_child(backdrop) @@ -95,8 +98,8 @@ func _build_modal() -> void: panel.anchor_top = 0.04 panel.anchor_bottom = 0.96 var style: StyleBoxFlat = StyleBoxFlat.new() - style.bg_color = Color(0.09, 0.08, 0.07, 0.97) - style.border_color = Color(0.55, 0.48, 0.32, 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) style.content_margin_left = 12.0 @@ -120,7 +123,7 @@ func _build_modal() -> void: title_lbl.text = ThemeVocabulary.lookup("statistics_title") title_lbl.size_flags_horizontal = Control.SIZE_EXPAND_FILL title_lbl.add_theme_font_size_override("font_size", 20) - title_lbl.add_theme_color_override("font_color", Color(0.9, 0.84, 0.65)) + title_lbl.add_theme_color_override("font_color", ThemeAssets.color("text.title")) title_row.add_child(title_lbl) _close_button = Button.new() @@ -218,7 +221,7 @@ func _build_graphs_tab(parent: Control) -> void: _graph_metric_label.custom_minimum_size.x = 200 _graph_metric_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER _graph_metric_label.add_theme_font_size_override("font_size", 15) - _graph_metric_label.add_theme_color_override("font_color", Color(0.85, 0.78, 0.58)) + _graph_metric_label.add_theme_color_override("font_color", ThemeAssets.color("text.secondary")) ctrl_row.add_child(_graph_metric_label) var next_btn: Button = Button.new() @@ -256,7 +259,7 @@ func _build_rankings_tab(parent: Control) -> void: _rank_metric_label.custom_minimum_size.x = 200 _rank_metric_label.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER _rank_metric_label.add_theme_font_size_override("font_size", 15) - _rank_metric_label.add_theme_color_override("font_color", Color(0.85, 0.78, 0.58)) + _rank_metric_label.add_theme_color_override("font_color", ThemeAssets.color("text.secondary")) ctrl_row.add_child(_rank_metric_label) var next_btn: Button = Button.new() @@ -297,7 +300,7 @@ func _build_histories_tab(parent: Control) -> void: _hist_notice.autowrap_mode = TextServer.AUTOWRAP_WORD_SMART _hist_notice.text = ThemeVocabulary.lookup("statistics_histories_pending") _hist_notice.add_theme_font_size_override("font_size", 15) - _hist_notice.add_theme_color_override("font_color", Color(0.5, 0.5, 0.5)) + _hist_notice.add_theme_color_override("font_color", ThemeAssets.color("text.muted")) panel.add_child(_hist_notice) @@ -399,7 +402,7 @@ func _add_demo_row( cat_lbl.custom_minimum_size.x = 160 cat_lbl.size_flags_vertical = Control.SIZE_SHRINK_CENTER cat_lbl.add_theme_font_size_override("font_size", 13) - cat_lbl.add_theme_color_override("font_color", Color(0.7, 0.65, 0.5)) + cat_lbl.add_theme_color_override("font_color", ThemeAssets.color("text.secondary")) row.add_child(cat_lbl) var val_lbl: Label = Label.new() @@ -417,11 +420,11 @@ func _add_demo_row( rank_lbl.add_theme_font_size_override("font_size", 14) if rank > 0: rank_lbl.text = "#%d" % rank - var ci: int = mini(rank - 1, RANK_COLORS.size() - 1) - rank_lbl.add_theme_color_override("font_color", RANK_COLORS[ci]) + var ci: int = mini(rank - 1, _rank_colors.size() - 1) + rank_lbl.add_theme_color_override("font_color", _rank_colors[ci]) else: rank_lbl.text = "--" - rank_lbl.add_theme_color_override("font_color", Color(0.4, 0.4, 0.4)) + rank_lbl.add_theme_color_override("font_color", ThemeAssets.color("text.disabled")) row.add_child(rank_lbl) var best_lbl: Label = Label.new() @@ -430,7 +433,7 @@ func _add_demo_row( best_lbl.size_flags_vertical = Control.SIZE_SHRINK_CENTER best_lbl.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT best_lbl.add_theme_font_size_override("font_size", 13) - best_lbl.add_theme_color_override("font_color", Color(0.5, 0.5, 0.5)) + best_lbl.add_theme_color_override("font_color", ThemeAssets.color("text.muted")) row.add_child(best_lbl) var avg_lbl: Label = Label.new() @@ -439,7 +442,7 @@ func _add_demo_row( avg_lbl.size_flags_vertical = Control.SIZE_SHRINK_CENTER avg_lbl.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT avg_lbl.add_theme_font_size_override("font_size", 13) - avg_lbl.add_theme_color_override("font_color", Color(0.4, 0.4, 0.4)) + avg_lbl.add_theme_color_override("font_color", ThemeAssets.color("text.disabled")) row.add_child(avg_lbl) _demo_list.add_child(row) @@ -518,7 +521,7 @@ func _add_axis_label(pos: Vector2, text: String) -> void: lbl.text = text lbl.position = pos lbl.add_theme_font_size_override("font_size", 10) - lbl.add_theme_color_override("font_color", Color(0.4, 0.4, 0.4)) + lbl.add_theme_color_override("font_color", ThemeAssets.color("text.disabled")) _graph_area.add_child(lbl) @@ -529,7 +532,7 @@ func _add_graph_placeholder(text: String) -> void: lbl.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER lbl.vertical_alignment = VERTICAL_ALIGNMENT_CENTER lbl.add_theme_font_size_override("font_size", 16) - lbl.add_theme_color_override("font_color", Color(0.4, 0.4, 0.4)) + lbl.add_theme_color_override("font_color", ThemeAssets.color("text.disabled")) _graph_area.add_child(lbl) @@ -593,8 +596,8 @@ func _add_rank_row( rank_lbl.custom_minimum_size.x = 44 rank_lbl.size_flags_vertical = Control.SIZE_SHRINK_CENTER rank_lbl.add_theme_font_size_override("font_size", 16) - var ci: int = mini(rank - 1, RANK_COLORS.size() - 1) - rank_lbl.add_theme_color_override("font_color", RANK_COLORS[ci]) + var ci: int = mini(rank - 1, _rank_colors.size() - 1) + rank_lbl.add_theme_color_override("font_color", _rank_colors[ci]) row.add_child(rank_lbl) var dot: ColorRect = ColorRect.new() @@ -616,7 +619,7 @@ func _add_rank_row( val_lbl.size_flags_vertical = Control.SIZE_SHRINK_CENTER val_lbl.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT val_lbl.add_theme_font_size_override("font_size", 15) - val_lbl.add_theme_color_override("font_color", Color(0.95, 0.82, 0.3)) + val_lbl.add_theme_color_override("font_color", ThemeAssets.color("accent.goldResource")) row.add_child(val_lbl) var trend_lbl: Label = Label.new() @@ -627,13 +630,13 @@ func _add_rank_row( match trend: 1: trend_lbl.text = ThemeVocabulary.lookup("trend_up") - trend_lbl.add_theme_color_override("font_color", Color(0.3, 0.9, 0.4)) + trend_lbl.add_theme_color_override("font_color", ThemeAssets.color("semantic.positive")) -1: trend_lbl.text = ThemeVocabulary.lookup("trend_down") - trend_lbl.add_theme_color_override("font_color", Color(0.9, 0.3, 0.3)) + trend_lbl.add_theme_color_override("font_color", ThemeAssets.color("semantic.negative")) _: trend_lbl.text = ThemeVocabulary.lookup("trend_flat") - trend_lbl.add_theme_color_override("font_color", Color(0.5, 0.5, 0.5)) + trend_lbl.add_theme_color_override("font_color", ThemeAssets.color("text.muted")) row.add_child(trend_lbl) _rank_list.add_child(row) @@ -644,7 +647,7 @@ func _add_rank_placeholder(text: String) -> void: lbl.text = text lbl.horizontal_alignment = HORIZONTAL_ALIGNMENT_CENTER lbl.add_theme_font_size_override("font_size", 15) - lbl.add_theme_color_override("font_color", Color(0.4, 0.4, 0.4)) + lbl.add_theme_color_override("font_color", ThemeAssets.color("text.disabled")) _rank_list.add_child(lbl) @@ -678,7 +681,7 @@ func _add_header_label( lbl.text = text lbl.custom_minimum_size.x = min_w lbl.add_theme_font_size_override("font_size", 12) - lbl.add_theme_color_override("font_color", Color(0.55, 0.5, 0.38)) + lbl.add_theme_color_override("font_color", ThemeAssets.color("text.muted")) if right_align: lbl.horizontal_alignment = HORIZONTAL_ALIGNMENT_RIGHT parent.add_child(lbl)