spaceship/CaptureLabel.gd

32 lines
893 B
GDScript3
Raw Normal View History

extends Label
Generalize the resource HUD readouts (#49) Replaces ResourceCounter/GasCounter/CargoCounter/GasCargoCounter - one hardcoded node plus one script per resource, times two scenes - with a single ResourceReadout.gd that builds one banked + one fleet-hold row per GameState.resource_types() entry at _ready(). A new resource added to ResourceDefinitions gets a HUD row with no scene edit and no new script, matching how ResourceBar and ResourceTransferList already generalize over resources. Preserves the existing visual layout (BANKED left, FLEET HOLD right), the ore-on-bright-surface contrast (via a bright_background flag replacing PlanetSurface's per-node color overrides), and the amber fleet-in-transit color convention. Reuses the already-generic ResourceGlyph for icons instead of NeonNumber's hardcoded ore hexagon. Uncovered and fixed a second bug along the way: test_cargo_readout.gd looked up its NeonNumber nodes immediately after add_child() in _initialize(), but ResourceReadout builds its rows in _ready(), which for a -s entry-point script does not fire synchronously during that add_child() - it's deferred to the first frame. Moved the lookup to after the existing elapsed wait in _process(), which is also what tests/test_resource_readout.gd's setup does from the start. Repo notes for the next agent, confirmed empirically this session: - A -s entry-point script can only reach an autoload's CONSTANTS via the bare identifier (GameState.RESOURCE_ORE works everywhere). Calling any of its METHODS that way (GameState.resource_types()) fails to compile with "Identifier not found: GameState", even from _initialize(). Route method calls through the actual instance (root.get_node("GameState")) instead, as the rest of the suite already does. - `git status --short | awk '{print $2}' | xargs touch` recreates deleted files as empty stubs, since touch on a missing path creates it. Filter out D-status paths before touching, or touch only the paths you know still exist. 🤖 Generated with Claude Code Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-16 08:30:10 +02:00
# Polls GameState directly, same convention as ResourceReadout, so it stays
# correct without anyone having to push updates into it. Hidden
# entirely when the current planet has no capture points (e.g. no setup
# resolved for it) rather than showing "0/0".
var _was_conquered: bool = false
func _process(_delta: float) -> void:
var planet_id: String = GameState.planet_id
var total: int = GameState.total_capture_points(planet_id)
if total <= 0:
visible = false
return
visible = true
var conquered: bool = GameState.is_planet_conquered(planet_id)
if conquered:
text = "CONQUERED"
if not _was_conquered:
_flash()
else:
text = "CAPTURED %d/%d" % [GameState.captured_point_count(planet_id), total]
_was_conquered = conquered
func _flash() -> void:
modulate.a = 0.0
var tween: Tween = create_tween()
tween.tween_property(self, "modulate:a", 1.0, 1.2)