109 lines
5.4 KiB
GDScript
109 lines
5.4 KiB
GDScript
class_name PanelRegistry
|
|
extends RefCounted
|
|
|
|
## Zentrale, DATENGETRIEBENE Anmeldung aller Editor-Bereiche (Karte t_eaccbfed,
|
|
## Operator-Vorgabe 20.10.). main.gd baut das Layout AUSSCHLIESSLICH aus dieser
|
|
## Registry — keine Panel-Erzeugung mehr fest verdrahtet.
|
|
##
|
|
## Warum: Die Umbau-Karten U2 (Szenen-Baum), U3 (Gruppen), U4 (Assets),
|
|
## U5 (Platzieren nur einmal), U6 (dezente Auswahl) und U7 (Feinschliff) ändern
|
|
## danach NUR ihr eigenes Modul und melden sich HIER an (einzeiliger Eintrag)
|
|
## — ohne main.gd anzufassen. Dadurch kollidieren parallele Karten nicht mehr
|
|
## in derselben Datei (gleiche Falle wie früher bei match_hud.gd).
|
|
##
|
|
## Struktur je Eintrag: titel (Tab-/Überschrift), gruppe ("rechts" = rechtes
|
|
## TabControl, "links" = linke Spalte, "unten" = Assets-Bereich, "map" = Abschnitte im Map-Tab, "dialog" = Einstellungen-Fenster, "toolbar" /
|
|
## "status" = Leisten-Aktionen), order (Sortier-Schlüssel), skript (preload-Pfad
|
|
## des Panel-Moduls). Ein Bereich erscheint GENAU EINMAL im Baum (test_ui_layout
|
|
## prüft das gegen Doppel-Namen).
|
|
|
|
const TITLE_TOOLBAR := "Werkzeuge"
|
|
const TITLE_STATUS := "Statuszeile"
|
|
|
|
## Die Bereiche in fester Reihenfolge. skript = preload-Pfad; jeder
|
|
## Panel-Eintrag muss in seinem Skript `static func spec()` haben, das
|
|
## mindestens {"titel", "gruppe", "order"} liefert (die Werte hier sind die
|
|
## Authorität — spec() wird von test_ui_layout GEGEN diese Tabelle geprüft).
|
|
const PANELS: Array = [
|
|
# --- rechts: Tab-Gruppe (Unity-Inspector-Spalte) ---
|
|
{"id": "inspektor", "titel": "Inspektor", "gruppe": "rechts", "order": 10,
|
|
"skript": "res://core/ui/inspector_panel.gd"},
|
|
{"id": "map", "titel": "Map", "gruppe": "rechts", "order": 30,
|
|
"skript": "res://core/ui/panels/map_panel.gd"},
|
|
{"id": "terrain", "titel": "Terrain", "gruppe": "rechts", "order": 40,
|
|
"skript": "res://core/ui/panels/terrain_panel.gd"},
|
|
# 25.10. UI-Aufräumen: Malen und Bauen hängen nicht mehr im Terrain-Tab.
|
|
{"id": "malen", "titel": "Malen", "gruppe": "rechts", "order": 45,
|
|
"skript": "res://core/ui/panels/malen_panel.gd"},
|
|
{"id": "bauen", "titel": "Bauen", "gruppe": "rechts", "order": 47,
|
|
"skript": "res://core/ui/panels/bauen_panel.gd"},
|
|
# Etappe 3: Server-Verwaltung (Admin-API des Match-Servers).
|
|
{"id": "server", "titel": "Server", "gruppe": "rechts", "order": 50,
|
|
"skript": "res://core/ui/panels/server_panel.gd"},
|
|
# --- map: Abschnitte UNTER den Map-Eigenschaften (Tab „Map“) ---
|
|
# 25.10. (Test-Befund): Prüfen/Test-Start/Symmetrie sind keine eigenen Tabs
|
|
# mehr. Spawn-Zonen, Test-Start-Info und Symmetrie wohnen im Map-Tab.
|
|
{"id": "check", "titel": "Spawn-Zonen", "gruppe": "map", "order": 10,
|
|
"skript": "res://core/ui/panels/check_panel.gd"},
|
|
{"id": "teststart", "titel": "Test-Start", "gruppe": "map", "order": 20,
|
|
"skript": "res://core/ui/panels/test_start_panel.gd"},
|
|
{"id": "loadout", "titel": "Loadout", "gruppe": "map", "order": 25,
|
|
"skript": "res://core/ui/panels/loadout_panel.gd"},
|
|
{"id": "modus", "titel": "Spielmodus", "gruppe": "map", "order": 22,
|
|
"skript": "res://core/ui/panels/modus_panel.gd"},
|
|
{"id": "symmetrie", "titel": "Symmetrie", "gruppe": "map", "order": 30,
|
|
"skript": "res://core/ui/panels/symmetry_panel.gd"},
|
|
# --- dialog: Inhalt des Einstellungen-Fensters (Knopf in der Kopfleiste) ---
|
|
# T3 Komfort (Karte t_aaff5dcc) + 25.10.: Gitter, Höhenlinien, Symmetrie-
|
|
# Modus, UI-Größe, Raster-Snap, Gizmo-Schritt, Karte prüfen.
|
|
{"id": "einstellungen", "titel": "Einstellungen", "gruppe": "dialog", "order": 10,
|
|
"skript": "res://core/ui/panels/settings_panel.gd"},
|
|
# --- links: Vorbereitet für U2 (Szenen-Baum); Bibliothek ist UNTEN ---
|
|
{"id": "szene", "titel": "Map-Inhalt", "gruppe": "links", "order": 10,
|
|
"skript": "res://core/ui/panels/scene_tree_panel.gd"},
|
|
# --- unten: Objekt-Bibliothek / Assets (Unity-Projekt-Fenster-Platz) ---
|
|
{"id": "assets", "titel": "Objekt-Bibliothek", "gruppe": "unten", "order": 10,
|
|
"skript": "res://core/ui/panels/assets_panel.gd"},
|
|
]
|
|
|
|
## Leisten-Aktionen (Toolbar-Buttons/Menüs — KEINE Panels, melden sich ditto
|
|
## datengetrieben an, damit T1s Lauf-Modus und künftige Aktionen main.gd
|
|
## nicht mehr anfassen). action = Methodenname an main (Callable wird gebunden).
|
|
const ACTIONS: Array = [
|
|
{"id": "karte_pruefen", "titel": "✅ Karte prüfen", "gruppe": "toolbar",
|
|
"order": 10, "action": "_on_check_map"},
|
|
{"id": "karte_testen", "titel": "▶ Karte testen", "gruppe": "toolbar",
|
|
"order": 20, "action": "_on_test_run"},
|
|
# Wiederanbindung 20.10. (T1b, Karte t_96e3c4ee): der Test-Start-Knopf war
|
|
# beim U1-Umbau aus der Leiste verschwunden.
|
|
{"id": "teststart", "titel": "🎯 Test-Start", "gruppe": "toolbar",
|
|
"order": 30, "action": "_on_test_start_tool_pressed"},
|
|
]
|
|
|
|
|
|
## Panel-Einträge einer Gruppe, nach order sortiert (Reihenfolge = Tab-Reihenfolge).
|
|
static func entries(gruppe: String) -> Array:
|
|
var out: Array = []
|
|
for e in PANELS:
|
|
if str(e["gruppe"]) == gruppe:
|
|
out.append(e)
|
|
out.sort_custom(func(a, b) -> bool: return int(a["order"]) < int(b["order"]))
|
|
return out
|
|
|
|
|
|
## Toolbar-Aktionen, nach order sortiert.
|
|
static func toolbar_actions() -> Array:
|
|
var out: Array = []
|
|
for e in ACTIONS:
|
|
if str(e["gruppe"]) == "toolbar":
|
|
out.append(e)
|
|
out.sort_custom(func(a, b) -> bool: return int(a["order"]) < int(b["order"]))
|
|
return out
|
|
|
|
|
|
## Eintrag per ID (für Tests/Probes).
|
|
static func entry(id: String) -> Dictionary:
|
|
for e in PANELS:
|
|
if str(e["id"]) == id:
|
|
return e
|
|
return {}
|