refactor(statistics): ♻️ Replace hardcoded rank badge colors with semantic design tokens for consistency

Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
This commit is contained in:
autocommit 2026-06-04 20:09:12 -07:00
parent 78dc200233
commit 164fed22ae

View file

@ -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)