# U3 · G3-HUD portieren Stand: 1. Oktober 2026, Nachtrag 7. Oktober 2026 (Spieltest bis Welle 8, Tooltip-Wertzeilen, Motive in drei weiteren Auflösungen). | 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 | **fertig** | | U3C | Eingabe und Befehle: Tasten, Kamera-Ziele, Auswahl im Feld, Bereit-Sperre, Planungsvorschau | **fertig** | | U3D | Prüfung (Teile A–H von `verify_g3`), Spieltest über die echte Oberfläche, Bilder, Leistung | **fertig** | 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 die benannten Instanzen der variablen Fonts über den Face-Index (Instanz ≪ 16). - In Cantarell fehlt „★“ (Godot nahm eine Ersatzschrift). Das HUD zeichnet den Stern als Symbol. - **Gewichte (U3D korrigiert):** Das Theme der Referenz deklariert Cantarell 560/700–760 und Cinzel 700, wendet sie aber nie an. `SaumwachtTheme.font` schreibt `variation_opentype = {"wght": weight}` mit dem *String*-Schlüssel „wght“; Godot 4.7.2 ignoriert den (gemessen: gleiche Fortschritte bei 400, 560 und 700; nur der Integer-Tag ändert sie). G3 zeigt beide Fonts in ihrer Grundinstanz Regular 400, und so auch der Port. Die Rollen (`LuneFace`) bleiben getrennt, damit U5 echte Gewichte vergeben kann. - **Laufweite und Konturen (U3D):** Godots `spacing_glyph` (Pixel je Glyph) wird als UI-Toolkit-`letterSpacing` umgerechnet (Hundertstel der Schriftgröße). Titel, Welle und Gold bekommen Godots dunklen Saum (`outline_size`) als weichen Schatten statt einer TextCore-Kontur — die Kontur liegt auf beiden Seiten der Glyphenkante und frisst die dünnen Striche der Regular-Schnitte, Godots Outline wächst nur nach außen. ### 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) | ## U3B · Komponenten und Bereiche Alles liegt unter `Assets/Luneraria/UI/Hud/` und ist aus Godot übertragen: | Unity | Godot | Inhalt | | --- | --- | --- | | `LuneHud.cs` | `lune_hud.gd` | die fünf Bereiche, Synchronisierung (10 Hz Planung, 5 Hz Kampf, Minimap 10 Hz, Ereignisse 4 Hz), UI-Größe (mindestens 1560 × 880 logische Pixel), Ereignis-Erkennung aus öffentlichem Zustand, Tooltips | | `LuneUi.cs`, `LuneElements.cs` | `lune_ui_theme.gd`, `status_badge.gd`, `hp_bar.gd`, `tower_indicator.gd`, `tab_bar.gd`, `lune_glyph.gd` | Textvarianten, Platten- und Knopfvarianten, Grundelemente | | `LuneComponents.cs` | `resource_display.gd`, `team_panel.gd`, `unit_card.gd`, `army_chip.gd`, `item_slot.gd`, `event_feed.gd`, `modal_panel.gd` | Gold, Team, Kaufkarten, Armee, Items, Ereignisse, Fenster | | `LuneLanePanels.cs` | `lane_indicator.gd`, `boss_indicator.gd`, `next_wave_panel.gd` | Lanes, Bossgrotte, nächste Welle | | `LuneArmyPanels.cs` | `champion_panel.gd`, `unit_detail.gd` | Angriffschampions, ausgewählte Einheit | | `LuneHeroPanels.cs` | `hero_card.gd`, `hero_detail.gd` | Heldenkarte, Heldenfenster (Anwerben, Werte, Items, Talente) | | `LuneMinimap.cs` | `lune_minimap.gd`, `lune_minimap_overlay.gd` | Minimap mit eigener Ebene für den Kamerarahmen | | `LunePortraits.cs` | `portrait_cache.gd`, `portrait_rect.gd` | Porträts aus den echten Modellen, einmal gerendert | | `LuneTooltip.cs` | `lune_tooltip.gd` | der eine Tooltip | | `LuneSettingsPanel.cs`, `LunePreferences.cs` | `lune_settings.gd`, `preferences.gd` | Optionen (F1) und gespeicherte Einstellungen | Die offenen Punkte aus G3 sind umgesetzt: - **Champion-Etikett:** „1 WELLE“ steht als Band am unteren Porträtrand und verdeckt die Köpfe nicht mehr. - **Typ-Symbole:** Schadens- und Rüstungstyp stehen als farbige Symbole auf den Einheitenkarten. Die Farben gleichen der Wellenvorschau: Ein Schadenstyp hat die Farbe der Rüstung, gegen die er 130 % trifft (Legion-TD-Prinzip). - **Armeewert:** Die Summe des Einsatzes steht in der Armeezeile („Wert 185“). - **Helden auf der Minimap:** kleine Porträts im Goldring statt Punkten, der eigene Held mit weißem Ring (Dota-Prinzip). Die Heldenkarte hat einen reservierten Befehlsplatz für die Ultimates der geplanten Helden (`PlannedHeroes`, Auslöser `Command`). Er bleibt verborgen, solange keiner dieser Helden spielbar ist. ## U3C · Eingabe und Befehle `Assets/Luneraria/UI/Game/LuneGame.cs` ist das Gegenstück zur HUD-Seite von `lune_game.gd`. - **Befehle:** Die Befehle des Menschen laufen über dieselbe Schnittstelle wie die der Bots (`LuneMatch.Submit`). Jeder Befehl meldet sein Ergebnis im HUD zurück. - **Bereit:** Bereit geht an die Host-Schleife; der Kampf beginnt, sobald alle bereit sind. Nach einem Kampf ist Bereit eine Sekunde lang gesperrt. - **Tasten wie in G3:** - 1–5 kaufen, Leertaste meldet Bereit (im Kampf: Pause), P pausiert. - Tab wechselt die Lane, F2–F4 springen zu Top, Mid und Bottom. - B, G und H zeigen den eigenen Ancient, die Grotte und den eigenen Helden. - R setzt die Kamera auf die eigene Lane zurück. - F1 öffnet die Optionen, M schaltet den Ton, F11 das Vollbild, Esc schließt Fenster und Auswahl. - **Kamera und Maus:** - Klicks auf Lanes, Ereignisse, Banner, Bossgrotte und Minimap bewegen die Kamera. - Über HUD-Flächen zoomt das Mausrad die Welt nicht. - Ein Linksklick im Feld wählt eine eigene Figur (innerhalb von 34 px). - **Planung:** Die eigene Entwurfsarmee steht in ihrer Formation. Die eigenen Aufstellungsflächen leuchten; Lanes mit eigenen Einheiten sind hervorgehoben. - **Optionen:** Sie pausieren einen laufenden Kampf offline. - **Menü:** Ein Hauptmenü gibt es im Unity-Port noch nicht. „Menü“ fragt deshalb nach und beendet das Spiel. Bot-Partien (Tests, Benchmark) laufen unverändert; der Spielcontroller folgt dem Sitz der laufenden Partie. In der Szene ersetzt der Spielcontroller die U2-Debug-Anzeige. Die Szenen- und Bibliotheksbauer arbeiten jetzt idempotent: - Animator-Controller und Post-Processing-Profil werden an Ort und Stelle aktualisiert. - Vorher erzeugte jeder Szenenbau neue interne IDs in 15 Dateien, obwohl der Inhalt gleich blieb. - Die Szene selbst entsteht weiter bei jedem Bau neu; Unity vergibt dabei neue Objekt-IDs. - Zwei Bauten hintereinander ergeben inhaltlich dieselbe Szene. Ersetzt man die IDs durch Platzhalter, sind alle 2840 Objekteinträge gleich; nur ihre Reihenfolge in der Datei ändert sich, weil Unity nach ID sortiert. ## U3D · Prüfung und Abnahme ### Prüfung (Port von `verify_g3`, Teile A–I) `HudVerifyTests` zählt jede Prüfung und schreibt die Summen nach `tools/out/hud-verify-*.txt`. Die Referenz `verify_g3` der Godot-Seite zählt 715 Prüfungen; der Port hat denselben Umfang plus Teil I (Feld um das HUD, U3-Zugabe). | Teil | Inhalt | Prüfungen | Fehler | | --- | --- | ---: | ---: | | A | Layout 1152×720 … 2560×1440 und Ultrawide, UI-Skalen 90–130 % | 585 | 0 | | B | Partiestatus: Ancients, Türme, Lanes, Wellen mit zwei und drei Ziffern, nur eigenes Gold | 21 | 0 | | C | Held, Items, Talente, normale Einheiten (ohne Itemslots), Lane-Befehle mit Grottenwarnung | 23 | 0 | | D | Angriffschampions (zeitlich), Bossgrotte in allen Zuständen, Lane des Wählenden, Banner | 16 | 0 | | E | Bereit-Sperre, Bots, Privatsphäre, abgebrochener Menschensitz | 17 | 0 | | F | Eingabe: Minimap, Lane-Klicks, Tasten, Feldklicks, kein Klick-Durchgriff, Tooltips | 18 | 0 | | G | Ereignisse, kritische Warnungen, Bewegung reduzieren | 14 | 0 | | H | Aktualisierungsraten, Porträt-Cache | 5 | 0 | | I | Feld (U3-Zugabe): Aufstellungsflächen, Grotteneingang, ruhender Boss, Namensschilder, Eigentümer-Ring, Ancient-Balken | 19 | 0 | | **Summe** | | **718** | **0** | Dazu EditMode 23/23 (Kern 402 Prüfungen, Sichtmodell, Bildraten-Logik) und PlayMode 13/13 (Szene bei echten Bildraten, Vertical Function Test, Capture, Verify A–I, UI-Toolkit-Probe). Die Bildwerkzeuge `HudViewsTests` und der Spieltest `HudPlaytest` sind `Explicit` und laufen nur gezielt. Fingerabdrücke der Bot-Partien unverändert: Seed 2 `DCE95C96556F3A1A`, Seed 9 ab Runde 21 `7B8E43AEFC0D60C5`. ### Bilder | Ordner | Inhalt | | --- | --- | | `screenshots/u3/motive-1920x1080/` | die 14 G3-Motive (`HudViewsTests`, Port von `g3_views.gd`): Planung, Held, Items, Einheit, Champion, Boss verfügbar/angekündigt, Kampf Top/Mid/Bottom, eigener und gegnerischer Ancient kritisch, Turm zerstört, große Kampfansicht | | `screenshots/u3/pruefung/` | Schlüsselbilder der Teile B–F (Status, Held, Items, Einheit, Champions, Boss, Tooltip) | | `screenshots/u3/aufloesungen/` | Kampf bei 1152×720, 1280×720, 2560×1080, 2560×1440 (Teil A) | | `screenshots/u3/motive-1280x720/`, `motive-2560x1080/`, `motive-2560x1440/` | dieselben 14 Motive bei 1280×720, Ultrawide und 2560×1440, als JPEG (Qualität 90) | | `screenshots/u3/spieltest/` | Spieltest über die echte Oberfläche, Wellen 1–8 (15 Bilder, JPEG; siehe unten) | Die drei weiteren Motivsätze nannte der U3D-Commit bereits, enthielt sie aber nicht. Sie wurden am 7. Oktober 2026 vom U3-Stand (`e2aadcb`) aus erzeugt und passen damit zum 1920er-Satz. Vergleichsbilder der Referenz: `../saumwacht-godot/docs/luneraria/screenshots/`. ### Spieltest über die echte Oberfläche `HudPlaytest` (Port von `g3_playtest.gd`) treibt die echte Partie nur über Eingaben: Klicks an Pixelkoordinaten von 1920×1080, Tasten, Zeigerbewegungen für Tooltips. Ein Tester schreibt Befehlsstapel nach `/tmp/lune_play/cmd-N.txt` und bekommt danach einen Screenshot zurück. Das Protokoll aller Befehle mit Runde und Phase steht in `logs/u3/playtest-log.txt`. **Lauf vom 7. Oktober 2026:** Wellen 1 bis 8 gespielt, Ende in der Planung von Welle 9; 26 Befehlsstapel in gut 12 Minuten. Der erste Lauf vom 2. Oktober endete in Runde 3. Nicht das Spiel brach ab, sondern die Werkzeugumgebung beendete den Unity-Prozess an ihrer Zeitgrenze. Der zweite Lauf startete Unity unabhängig davon. Stand des Laufs: `luneraria/u5.2` (`9479d44`) mit der Tooltip-Korrektur unten. Das HUD ist das von U3 mit den Befehlswegen aus U4. Die Welt zeigt schon die U5.2-Darstellung, daher sind die Bilder dunkler als die Motive. Die Partie ist die der Szene (Seed 2); sie beginnt direkt in der Planung, weil die Szene den Startbildschirm aus U4 nicht enthält (siehe Befunde). Geprüft: - **Planung:** Startaufstellung per Knopf; Kauf per Taste 1–5, auch während der Reiter Angriffschampions offen ist; Gold, Einkommen und Rückgängig. - **Tooltips:** Lane mit Turm-HP und Grund („Grenzwacht bei 82 %“); Kaufkarte mit Werten, Aufwertung und „Es fehlen 52 Gold.“ - **Kampf:** Bereit per Leertaste, Tempo 2× per Klick, Pause mit P, Lane-Wechsel F3/F4, Klick auf eine Lane bewegt die Kamera, R setzt sie zurück. - **Einheiten:** Auswahl über den Armee-Chip, Details mit Aufwertung, Einsatz auf Bottom per Klick (Armeezeile „MID 6 · BOTTOM 1“), Esc schließt. - **Held:** Fenster „Held anwerben“ mit drei Porträts; Quellgeflecht angeworben. Items zeigen „ZU TEUER“ und „STUFE FEHLT“. H zeigt den Helden im Feld mit Namensschild. Bei Stufe 4 und 6 erscheint „TALENT!“; „Weite Quelle“ per Klick gewählt. - **Angriffschampion:** Rostschieber auf Mid gebucht. Welle 8 kündigt ihn an („FÜR EUCH“); im Kampf erscheint er auf Mid, die Ereignisleiste meldet ihn. - **Rückmeldungen:** Wellenabschluss mit Ertrag, Lane-Bedrohung UMKÄMPFT und UNTER DRUCK, gefallene Einheiten durchgestrichen, Heldenkarte „gefallen“. Befunde: | Befund | Maßnahme | | --- | --- | | Werte in Tooltip-Zeilen brachen um („7.500 / 7.500 (100“ und „%)“ in zwei Zeilen). Jede Wertzeile hatte eigene Spalten, und die Breite war auf 300 px begrenzt | Tooltip legt Wertzeilen wie Godots `GridContainer` an: drei Spalten (Symbol, Name, Wert), ohne Umbruch, die breiteste Zeile bestimmt die Breite. Nur Text, Hinweis und Warnung brechen bei 300 px um | | Die Heldenkarte öffnet bei „TALENT!“ den Reiter Werte | wie in G3 (`open_hero`); der Reiter „TALENTE ★“ zeigt die offene Wahl. Unverändert | | Das Namensschild des Helden liegt im Getümmel über anderen Figuren | lesbar, wie in G3. Unverändert | | Der Startbildschirm aus U4 erscheint nicht: Nichts legt `LuneNetPlay` in die Szene. Der Verlassen-Dialog verspricht das Hauptmenü, beendet aber das Spiel | gehört zu U4, als eigene Aufgabe vorgemerkt | Bilder: `screenshots/u3/spieltest/` (Lane-Tooltip, Karten-Tooltip, Einheitendetails, Lane umkämpft, Held anwerben und angeworben, Items zu teuer, Held im Feld, Einsatz Bottom, Kampf Bottom, Talentwahl, Champion gebucht, Ankündigung Welle 8, Kampf Mid in Welle 8, Planung Welle 9). ### Leistung **Player** (macOS, Mono, Release; Apple M5, Metal; 1920 × 1080 im Fenster, VSync aus): Seed 9 in Runde 21, Spieltempo 1×, gemessen ab 10 s Kampf mit `LuneBenchmark`. Die Szene trägt seit U3 das HUD (Sitz 1 der Bot-Partie); `ui_ms_per_frame` zählt die HUD-Skripte (Tick des Panels plus Spielcontroller). | Ansicht | Einheiten | fps (Mittel) | Bildzeit Median | p95 | Sim | Views | **UI** | Hauptthread (Mittel/p95) | | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- | | ganze Karte (Zoom 64) | 116 | 169 | 4,60 ms | 13,05 ms | 0,094 ms | 0,309 ms | **0,090 ms** | 2,77 / 3,94 ms | | Mid-Lane nah (Zoom 22) | 63 | 218 | 3,90 ms | 9,60 ms | 0,044 ms | 0,332 ms | **0,078 ms** | 2,35 / 3,06 ms | Das HUD kostet unter 0,1 ms je Bild und liegt damit unter Simulation und Ansichten. Gegenüber den U2D-Läufen ohne HUD (158–160 bzw. 205–207 fps) ist die Bildrate im Rahmen der Laufstreuung; die Ausreißer beim Present (p95 10–13 ms) sind kürzer als in den früheren U2D-Spannen (18–26 ms), ohne dass sich daran etwas geändert hätte — das bleibt Laufstreuung und offene U5-Frage. Rohdaten: `logs/u3/player-benchmark-macos.json`. Befehle siehe [U2-WORLD.md](U2-WORLD.md#leistung) (Build `LunePlayerBuild.BuildMac`, Lauf mit `-luneBenchmark`). ### Feld um das HUD (Zugabe aus dem Motivvergleich) Der Vergleich der 14 Motive mit der Referenz brachte Darstellungen hervor, die zum G3-Bild gehören, aber noch nicht im Port standen: - **Namensschilder** (`LuneFieldTags`): Helden mit Stufe in Heldengold, Angriffschampions und der Boss in der hellen Teamfarbe. Ein eingesetzter Boss nennt, für wen er kämpft („SCHLUNDKRONE · für Blau“) — G3s Antwort auf die Farbnähe seiner Kristalle und Blaus Armeen. Feste Bildschirmgröße wie Godots `fixed_size`-Schilder, hinter allen HUD-Bereichen, ohne Maus. - **Eigentümer-Ring** am eingesetzten Boss in der Teamfarbe. - **Ancient-Balken** über den Ancients, solange sie beschädigt stehen (3,4 m breit, 11,2 m hoch, kameragerichtet). - **Ruhende Schlundkrone** auf dem Podest, solange die Grotte offen ist und kein Kämpfer dort steht (`lune_grotto_view.gd`), neutral, in ihrem Idle-Clip. Die Lichtzustände der Grotte (Runen, Kristalle, Funken) sind noch nicht übertragen. - **Grotteneingang** der eigenen Seite als Ring, solange die Grotte offen ist. - **Aufstellungsflächen** als eigene Objekte (vormals nur Renderer-Sichtbarkeit), beleuchtet, wenn die Lane eigene Einheiten hat. ### Befunde und Korrekturen | Befund | Maßnahme | | --- | --- | | Godot wendet die deklarierten Schriftgewichte nie an (String-Schlüssel „wght“ wird ignoriert) | Port zeigt wie G3 Regular 400; `Cinzel-Bold` ersetzt durch `Cinzel-Regular`; Rollen bleiben für U5 | | TextCore-Kontur frisst die dünnen Striche der Regular-Schnitte | Godots dunkler Saum als weicher Schatten; Laufweite aus `spacing_glyph` umgerechnet | | Layout der rechten Spalte und des Banners nutzte geschätzte Höhen | Folgt den echten Höhen von Top-Panel, Bottom-Leiste und Systemzeile (`GeometryChangedEvent`) | | Kamera startete in jeder Partie in derselben Ansicht | Start wie Godot `_ready`: eigene Lane in Planungsdistanz, Bot-Partie von oben | | Eigentümer-Ringe und Ancient-Balken fehlten in den Motiven | `OwnerRingRound`/`OwnerRingDiamond`, `AncientBarFill_*`, Balken und ruhender Boss in der Ansicht | ### Abnahme U3 | Vorgabe | Stand | | --- | --- | | G3-HUD übertragen (Ancients, Wellen, Gold, Lanes, Türme, Team, Einheitenkarten, Armee, Held mit Items und Talenten, Angriffschampions, nächste Welle, Bossstatus, Minimap, Bereit, Tooltips, Ereignisse, Optionen, Partieende) | erfüllt (U3A–C) | | Sichtmodell mit denselben Privatsphäre-Regeln wie `LuneHudModel` | erfüllt (U3A) | | Eingabe und Befehle wie in G3, Befehle über dieselbe Schnittstelle wie die Bots | erfüllt (U3C) | | Offene G3-Punkte: Champion-Etikett, Typ-Symbole, Armeewert, Helden auf der Minimap | erfüllt (U3B) | | Prüfung Teile A–H von `verify_g3` | erfüllt, 718 Prüfungen mit Teil I, 0 Fehler | | Spieltest über die echte Oberfläche | erfüllt (Wellen 1–8, Nachtrag 7. Oktober 2026, siehe oben) | | Bilder der 14 Motive und der Auflösungen | erfüllt (1920×1080 als PNG; 1280×720, 2560×1080, 2560×1440 als JPEG seit dem Nachtrag) | | Leistung gemessen, einschließlich HUD-Kosten | erfüllt (`ui_ms_per_frame` 0,08–0,09) | | Bot-Partien und Fingerabdrücke unverändert | erfüllt | | Bekannte Unterschiede dokumentiert | erfüllt (siehe unten und [KNOWN-BEHAVIOR-DIFFERENCES.md](KNOWN-BEHAVIOR-DIFFERENCES.md)) | ### Bekannte Grenzen - **Kein Hauptmenü** im Port; „Menü“ beendet das Spiel nach Rückfrage. Das Menü mit Netzwerk-Host/Join gehört zu U4 (dort gebaut, aber noch nicht in die Szene eingebunden, siehe Spieltest). - **Grottenlicht** (Runen, Kristalle, Funken) fehlt; nur die ruhende Schlundkrone steht dort. - **Geplante Helden** behalten ihren reservierten Befehlsplatz, solange keiner dieser Helden spielbar ist. - **Windows- und Linux-Player** weiterhin an die fehlenden Build-Module gebunden ([U1.5-UNITY.md](U1.5-UNITY.md)). - **Schriftgewichte** wie in G3 absichtlich Regular 400; echte Gewichte sind eine U5-Entscheidung.