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://src/ui/inspector_panel.gd"}, {"id": "map", "titel": "Map", "gruppe": "rechts", "order": 30, "skript": "res://src/ui/panels/map_panel.gd"}, {"id": "terrain", "titel": "Terrain", "gruppe": "rechts", "order": 40, "skript": "res://src/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://src/ui/panels/malen_panel.gd"}, {"id": "bauen", "titel": "Bauen", "gruppe": "rechts", "order": 47, "skript": "res://src/ui/panels/bauen_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://src/ui/panels/check_panel.gd"}, {"id": "teststart", "titel": "Test-Start", "gruppe": "map", "order": 20, "skript": "res://src/ui/panels/test_start_panel.gd"}, {"id": "loadout", "titel": "Loadout", "gruppe": "map", "order": 25, "skript": "res://src/ui/panels/loadout_panel.gd"}, {"id": "modus", "titel": "Spielmodus", "gruppe": "map", "order": 22, "skript": "res://src/ui/panels/modus_panel.gd"}, {"id": "symmetrie", "titel": "Symmetrie", "gruppe": "map", "order": 30, "skript": "res://src/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://src/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://src/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://src/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 {}