champions-of-luneraria/docs/port/U3-UI.md
Martin Stickelbroeck 4dee9b18d2 U3A HUD-Grundlagen: UI Toolkit, Sichtmodell, menschlicher Sitz
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>
2026-10-01 23:57:45 +02:00

6.6 KiB
Raw Blame History

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

  • LuneMatchRunner und LuneMatchDriver haben 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 aus lune_ui_theme.gd und dem Saumwacht-Menütheme, Zahlenformate (12.000, Dezimalkomma).
  • Theme/LunePlates.cs: die Platten aus forged_style.gd (Fase, Verlauf, Innenlinie, Kante, Schatten, Fokusring).
  • Theme/LuneGlyphs.cs: alle 50 Symbole aus lune_glyphs.gd mit Painter2D.
  • 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)