Beginn des Ports des G3-HUD (Referenz luneraria/g3, 1b540f2). - Entscheidung UI Toolkit statt uGUI nach kurzer Bewertung und einer Probe: Panel rendert im Batchmodus in eine 1920x1080-Textur (Skalierung wie Godot canvas_items/expand, 1600x960), gefaste Verlaufsplatten, alle 50 Symbole, Schriften aus den variablen Fonts der Referenz. - Sichtmodell portiert (LuneHudModel, LuneLaneThreat, LuneStats) mit den Privatsphäre-Regeln der Referenz: Gold, Entwurf, Rückgängig und neue Buchungen nur für den eigenen Sitz; Lanes, Gebäude, Boss und Wellen aus öffentlichem Zustand. - Menschlicher Sitz in LuneMatchRunner/LuneMatchDriver: Bots planen die übrigen fünf Sitze, die Planung wartet auf Bereit; Tempo 1x/2x/4x und Pause nur im Kampf. Bot-Partien unverändert. - Theme-Grundlagen: Farben und Zahlenformate, Platten (forged_style.gd), Vektorsymbole (lune_glyphs.gd) mit Painter2D, statische SDF-Atlanten aus den benannten Instanzen von Cantarell und Cinzel (OFL). - Tests: EditMode 23/23 (12 neue: gleiches öffentliches Bild für alle Sitze, fremde Entwürfe privat, private Boss-Lane-Wahl, Lane-Bedrohung, Bosszustände, nächste Welle, Bereit-Sperre, Formate, menschlicher Sitz); PlayMode 3/3, Fingerabdrücke der Bot-Partien unverändert (DCE95C96556F3A1A, 7B8E43AEFC0D60C5). - Dokumentation: U3-UI (Bewertung, U3A), U5-VISUAL (Vorgaben des Projektinhabers: stilisierter Realismus für die ganze Welt, erst in U5). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
6.6 KiB
U3 · G3-HUD portieren
Stand: 1. Oktober 2026.
| Teil | Inhalt | Zustand |
|---|---|---|
| U3A | Entscheidung UI Toolkit, Sichtmodell mit Privatsphäre, menschlicher Sitz, Theme-Grundlagen (Farben, Platten, Symbole, Schriften) | fertig |
| U3B | Komponenten, Porträts, Tooltip, alle HUD-Bereiche, Optionen, Partieende | in Arbeit |
| U3C | Eingabe und Befehle: Tasten, Kamera-Ziele, Auswahl im Feld, Bereit-Sperre, Planungsvorschau | offen |
| U3D | Prüfung (Teile A–H von verify_g3), Spieltest über die echte Oberfläche, Bilder, Leistung |
offen |
Funktionale Referenz ist das G3-HUD aus Godot (../saumwacht-godot/docs/luneraria/G3-HUD.md, Commit 1b540f2). Es wird übertragen, nicht neu erfunden.
Zu übertragen
- Ancient-Anzeige, Welle und Phase, Gold.
- Drei Lanes mit Bedrohung und Türmen, Teammitglieder.
- Einheitenkarten, Armee.
- Held mit Stufe, Erfahrung, drei Itemslots und Talenten.
- Angriffschampions, nächste Welle, Bossstatus.
- Minimap, Bereit-Zustand, Tooltips, Ereignisse.
- Datenzugang über ein Sichtmodell mit denselben Privatsphäre-Regeln wie
LuneHudModel.
Die geplanten Helden (PlannedHeroes) mit Command-Menü für Ultimates sind im Layout vorzusehen.
Der Bestand in Godot umfasst rund 5.100 Zeilen:
lune_hud.gd(1.058 Zeilen),lune_hud_model.gd(333),- 22 Komponenten,
- Theme (
lune_ui_theme.gd,forged_style.gd) und Vektorsymbole (lune_glyphs.gd), - Minimap, Porträt-Cache, Optionen,
- die Verdrahtung in
lune_game.gd(Befehle, Tasten, Kamera, Auswahl).
Das Hauptmenü (lune_menu.gd, mit Netzwerk-Host/Join) ist der Startbildschirm des Spiels und gehört nicht zum HUD.
Entscheidung: UI Toolkit
Vor Beginn war eine kurze technische Bewertung gefordert, dann ein System als Hauptlösung. Gewählt ist UI Toolkit; uGUI kommt im HUD nicht vor.
| Kriterium | UI Toolkit | uGUI |
|---|---|---|
| Aufbau wie in Godot (Komponenten im Code, Container) | VisualElement und Flexbox entsprechen Godots Box-Containern; Komponenten sind C#-Klassen |
GameObjects mit RectTransform und Layout-Gruppen; jede Zeile ein Objekt, Layout-Gruppen teuer beim Neuaufbau |
Eigenes Zeichnen (Godot _draw: Platten, 50 Symbole, Balken, Minimap) |
generateVisualContent mit Painter2D (Pfade, Bögen, konkave Flächen) und eigenen Meshes (Verlauf) |
eigene Graphic-Klassen; konkave Flächen müsste man selbst triangulieren |
Skalierung wie Godot (canvas_items, expand, Basis 1600×960) |
PanelSettings: Scale With Screen Size, Expand, 1600×960 ergibt bei 16:9 dieselbe logische Fläche 1706×960 |
CanvasScaler gleichwertig |
| Prüfbarkeit im Batchmodus | Panel rendert in eine RenderTexture beliebiger Größe; Elemente per Name und Pick abfragbar | Canvas über eine Kamera rendern; Abfragen über GameObjects |
| Tooltips, Weltelemente | Laufzeit-Tooltip selbst bauen (Godot hatte ohnehin einen eigenen); Weltbalken sind schon Meshes | eingebaut nur im Editor; Weltraum-Canvas reif |
| Empfehlung in Unity 6 | empfohlenes System für neue Laufzeit-Oberflächen | weiter unterstützt, älterer Ansatz |
Probe vor der Entscheidung (Tests/UI/PlayMode/UiToolkitProbeTests, Bild screenshots/u3/00-ui-toolkit-probe.png):
- Ein Panel rendert im Batchmodus in eine 1920×1080-Textur.
- Die Position stimmt mit Godot überein: 12 logische Pixel ergeben 13,5 Pixel bei 1920×1080.
- Die Platten mit Fasen, Verlauf, Innen- und Kantenlinie entstehen korrekt.
- Alle 50 Symbole zeichnen sich, auch die konkaven (Mondsichel, Turm, Kreuz).
- Die Schriften kommen aus Godots variablen Fonts.
U3A · Grundlagen
Sichtmodell und Privatsphäre
Portiert nach Assets/Luneraria/UI/Model/, Verhalten wie in Godot:
| Datei | Inhalt |
|---|---|
LuneHudModel.cs |
einziger Datenzugang des HUD: Phase, eigener Sitz (Gold, Entwurf, Rückgängig, Buchungen), Gebäude, Ancients, Mitspieler, Lanes, Boss, nächste Welle, öffentlicher Digest |
LuneLaneThreat.cs |
Lane-Bedrohung RUHIG · UMKÄMPFT · UNTER DRUCK · KRITISCH, nur aus öffentlichem Zustand (Turm-HP, Positionen, Ankündigungen) |
LuneStats.cs |
Wertzeilen und Tooltip-Inhalte aus den echten Definitionen (Schaden je Treffer, Tempo, Reichweite, Rüstungsmatrix) |
Die Privatsphäre-Regeln gelten unverändert:
- Gold, Entwurf, Rückgängig und neue Buchungen gibt es nur für den eigenen Sitz.
- Von anderen sieht man Name, Lane, Bereitschaft, Mensch/Bot/offline und den bestätigten Helden.
- Lanes, Gebäude, Boss und Wellen kommen aus öffentlichem Zustand.
Eine Abweichung: Im öffentlichen Digest (Testhilfe) steht beim Boss die öffentliche Claim-Lane. Godot nahm dort auch die private Lane-Wahl des Wählenden auf, sodass der Digest für ihn vom Bild der anderen abweichen konnte.
Menschlicher Sitz
LuneMatchRunnerundLuneMatchDriverhaben einen menschlichen Sitz bekommen (HumanSlot).- Die Bots planen nur die anderen fünf Sitze. Die Planung wartet auf „Bereit“ des Menschen, wie offline in Godot (
lune_game.gd), und nach der Abrechnung beginnt sofort die nächste Planung. - Tempo (1×, 2×, 4×) und Pause wirken nur im Kampf.
- Bot-Partien (
HumanSlot = -1) laufen unverändert. Die Bildraten-Tests prüfen das mit denselben Fingerabdrücken.
Theme, Symbole, Schriften
Theme/LuneUiTheme.cs: alle Farben auslune_ui_theme.gdund dem Saumwacht-Menütheme, Zahlenformate (12.000, Dezimalkomma).Theme/LunePlates.cs: die Platten ausforged_style.gd(Fase, Verlauf, Innenlinie, Kante, Schatten, Fokusring).Theme/LuneGlyphs.cs: alle 50 Symbole auslune_glyphs.gdmitPainter2D.- Schriften: Cantarell und Cinzel als statische SDF-Atlanten (
LuneUiAssetsBuilder,Settings/LuneUi.asset, Lizenz OFL).- Unitys Textsystem hat keine Gewichtsachse. FreeType lädt aber die benannten Instanzen der variablen Fonts: Cantarell Regular und Bold, Cinzel Bold.
- Godots Gewicht 700 und darüber (Versalien, Werte, Titel) passt damit genau.
- Das Gewicht 560 der Fließtexte hat keine benannte Instanz. Es entsteht aus Regular mit einer 0,25-px-Kontur in der Textfarbe; im Vergleichsbild wirkt das wie Medium.
- In Cantarell fehlt „★“ (Godot nahm eine Ersatzschrift). Das HUD zeichnet den Stern als Symbol.
Prüfung U3A
| Test | Ergebnis |
|---|---|
| EditMode gesamt | 23/23, davon 12 neue: öffentliches Bild für alle sechs Sitze gleich (Planung und Kampf), fremde Entwürfe (Held, Champion-Buchung) bis zum Kampf unsichtbar, private Boss-Lane-Wahl, Lane-Bedrohung bei Turm-HP und Ankündigungen, Einheitenzahlen je Lane, Bosszustände, nächste Welle gleich der Regelwelle (Runden 1–24), Bereit-Sperre, Zahlenformate, menschlicher Sitz, Bot-Partie unverändert |
| PlayMode-Probe | UI Toolkit rendert im Batchmodus (siehe oben) |