- build_game_theme.gd: extract build_theme() as a static func returning the fully-built Theme; _init() is now a thin save+quit wrapper. Enables a test to build a fresh Theme in memory without running the SceneTree main loop. - test_theme_resource.gd: add test_committed_tres_matches_builder() — builds a fresh Theme via the preloaded builder and compares bg_color against the committed game_theme.tres for PrimaryCTA/normal, ParchmentCard/panel, and DarkPanel/panel. Catches "palette/builder changed, .tres not regenerated." - build_game_theme.gd: give Tab, TabActive, and Chip explicit hover/pressed/ focus styleboxes (focus is StyleBoxEmpty to suppress the default ring) so they no longer fall back to Godot's default gray button on interaction. Add a disabled stylebox + font_disabled_color to PrimaryCTA for the unaffordable-CTA state the 2a shell will need. - theme_keys.gd: add HEADING/ACCENT/MONO font-role consts (kept out of ALL, which is stylebox-variation-only); build_game_theme.gd and theme_showcase.gd now reference them instead of raw StringName literals. - theme_showcase.gd: add an italic DM-voice RichTextLabel (EB Garamond italic face, spec §6) and two semantic-coloured chips (BLOOD for aggressive actions, GOLD for pay/faith) alongside the existing neutral chip, demonstrating the script-applied colouring from spec §5.3. - dark_bay.gdshader: comment noting the stripe uses FRAGCOORD (screen-space) while the vignette uses UV (node-local) — intended for full-bleed use. - surfaces/*.gd: ## comments documenting the accepted deviation from spec §5.4 (uniforms set at runtime from Palette rather than baked into the .tscn) — no behavior change. - Regenerated game_theme.tres via build_game_theme.gd. Full suite: 125/125 (was 124, +1 drift-guard test). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GFDm1ku9WDUacK2S78m2be
37 lines
1.2 KiB
GDScript
37 lines
1.2 KiB
GDScript
# client/scripts/theme/theme_keys.gd
|
|
class_name ThemeKeys
|
|
extends RefCounted
|
|
## Type-variation names for game_theme.tres. Scripts set `theme_type_variation`
|
|
## to one of these so a typo is a compile-time symbol error, not a silent miss.
|
|
## §2: presentation.
|
|
|
|
const PRIMARY_CTA := &"PrimaryCTA"
|
|
const TAB := &"Tab"
|
|
const TAB_ACTIVE := &"TabActive"
|
|
const CHIP := &"Chip"
|
|
const ITEM_TILE := &"ItemTile"
|
|
const ITEM_TILE_EMPTY := &"ItemTileEmpty"
|
|
const PARCHMENT_CARD := &"ParchmentCard"
|
|
const PARCHMENT_INSET := &"ParchmentInset"
|
|
const DARK_PANEL := &"DarkPanel"
|
|
|
|
## Font roles (Label type-variations carrying a font, not a stylebox). Kept
|
|
## separate from ALL below, which is stylebox variations + their base type only.
|
|
const HEADING := &"Heading"
|
|
const ACCENT := &"Accent"
|
|
const MONO := &"Mono"
|
|
|
|
## Every variation name + the base Control type it decorates. The builder and the
|
|
## test both iterate this so they can never drift apart.
|
|
const ALL := {
|
|
PRIMARY_CTA: "Button",
|
|
TAB: "Button",
|
|
TAB_ACTIVE: "Button",
|
|
CHIP: "Button",
|
|
ITEM_TILE: "PanelContainer",
|
|
ITEM_TILE_EMPTY: "PanelContainer",
|
|
PARCHMENT_CARD: "PanelContainer",
|
|
PARCHMENT_INSET: "PanelContainer",
|
|
DARK_PANEL: "PanelContainer",
|
|
}
|