extends Label # 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 garrison (e.g. no setup resolved for it) rather # than showing "0/0". # A direct script preload, not the bare "PlanetDefinitions" global class_name # - the same load-order hazard PlanetSurfaceController's setup_host comment # already documents: the global identifier is only guaranteed registered # after an editor/import pass, a direct preload never depends on that. const PLANET_DEFINITIONS = preload("res://planets/PlanetDefinitions.gd") var _was_conquered: bool = false var display_enabled: bool = true func _process(_delta: float) -> void: if not display_enabled: visible = false return var planet_id: String = GameState.planet_id var total: int = GameState.garrison_total(planet_id) if total <= 0: visible = false return visible = true var conquered: bool = GameState.is_planet_conquered(planet_id) if conquered: # #76: a research_lab's whole reward is invisible otherwise - the # research point balance lives in a HUD number the player has no # reason to be watching at the exact moment it changes. Naming the # reward right on the same flash that already announces conquest # is the same "explain it where it happens" idiom BuildController # uses for a refused build. text = "CONQUERED - +1 RESEARCH POINT" \ if GameState.planet_definition_id == PLANET_DEFINITIONS.RESEARCH_LAB_ID else "CONQUERED" if not _was_conquered: _flash() else: # #211: what is left to fight, counted down, rather than rings held. text = "GARRISON %d/%d" % [GameState.garrison_remaining(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)