saumwacht-godot/scripts/luneraria/ui/components/resource_display.gd
Martin Stickelbroeck 1b540f2a55 G3 (Zwischenstand): neues Ingame-HUD; Projekt wechselt nach Unity
Nicht abgenommen: Nach dem ersten Spieltest wurde entschieden, Champions of
Luneraria nach Unity 6 zu portieren. Dieser Stand ist die Referenz für das
HUD im Unity-Projekt (../luneraria-unity).

- HUD neu aus Komponenten mit eigenem Theme, Porträts aus den echten Modellen
  (einmal gerendert, zwischengespeichert), Lane-Übersicht mit deterministischer
  Bedrohung aus öffentlichem Zustand, Bossgrotte, nächste Welle, Ereignisse,
  Minimap mit zusammengefassten Armeen, Held/Items/Talente, Einheitendetails,
  Angriffschampions, Bereit-Sperre, UI-Größe, Team-Formen statt nur Farben
- Privatsphäre über LuneHudModel: fremdes Gold und fremde Entwürfe erscheinen nie
- Keine Regeländerung: Regeln 91/91, M2 73/73, Netz 43/43; verify_g3 715/715;
  verify_m1 38/38 und verify_m2 14/14 mit angepassten UI-Treibern
- Spieltest bis Welle 8 über die echte Oberfläche, Befunde in G3-HUD.md
- HELDEN-KONZEPT.md: vom Projektinhaber vorgegebene Helden (nicht umgesetzt)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-29 19:59:55 +02:00

39 lines
1.3 KiB
GDScript

class_name LuneResourceDisplay
extends HBoxContainer
## The viewer's own gold with the coin symbol and the base income of the next settlement.
## It is only ever fed the own seat's gold; other players' gold never reaches the HUD.
var amount: Label
var detail: Label
var _coin: LuneGlyph
var _shown: int = -1
var _flash: float = 0.0
func _init() -> void:
add_theme_constant_override("separation", 8)
mouse_filter = Control.MOUSE_FILTER_PASS
_coin = LuneGlyph.make("coin", LuneUiTheme.GOLD, 30.0, self)
var column := VBoxContainer.new()
column.add_theme_constant_override("separation", -2)
column.mouse_filter = Control.MOUSE_FILTER_IGNORE
add_child(column)
amount = LuneUiTheme.label("0", "HudGold", column)
detail = LuneUiTheme.label("", "HudMuted", column)
func set_values(gold: int, income: int, show_income: bool = true) -> void:
if gold != _shown:
if _shown >= 0 and not Preferences.reduced_motion:
_flash = .45
set_process(true)
_shown = gold
amount.text = LuneUiTheme.number(gold)
var line: String = ("+%s nächste Runde" % LuneUiTheme.number(income)) if show_income else ""
if detail.text != line:
detail.text = line
detail.visible = show_income
func _process(delta: float) -> void:
_flash = maxf(0.0, _flash - delta)
amount.modulate = Color(1, 1, 1).lerp(Color(1.35, 1.2, .8), _flash / .45)
if _flash <= 0.0:
set_process(false)