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>
33 lines
1 KiB
GDScript
33 lines
1 KiB
GDScript
class_name LuneTabBar
|
|
extends HBoxContainer
|
|
## Tabs with a bronze underline for the open one. `select` changes only the display;
|
|
## `tab_changed` fires on player input.
|
|
|
|
signal tab_changed(index: int)
|
|
|
|
var current: int = 0
|
|
var tabs: Array[Button] = []
|
|
var _group := ButtonGroup.new()
|
|
|
|
func _init() -> void:
|
|
add_theme_constant_override("separation", 2)
|
|
|
|
func add_tab(title: String, tooltip_title: String = "", tooltip_text: String = "") -> Button:
|
|
var tab := LuneUiTheme.button(title, "HudTab", self)
|
|
tab.toggle_mode = true
|
|
tab.button_group = _group
|
|
var index: int = tabs.size()
|
|
tab.pressed.connect(func() -> void:
|
|
current = index
|
|
tab_changed.emit(index))
|
|
if not tooltip_title.is_empty():
|
|
LuneTooltip.attach(tab, func() -> Dictionary: return {"title": tooltip_title, "text": tooltip_text})
|
|
tabs.append(tab)
|
|
if tabs.size() == 1:
|
|
tab.set_pressed_no_signal(true)
|
|
return tab
|
|
|
|
func select(index: int) -> void:
|
|
current = clampi(index, 0, tabs.size() - 1)
|
|
for i: int in range(tabs.size()):
|
|
tabs[i].set_pressed_no_signal(i == current)
|