Die offenen Reste der U3-Abnahme, auf dem letzten Commit (U5.2).
- Spieltest über die echte Oberfläche (HudPlaytest): Wellen 1–8 nur mit
Klicks und Tasten gespielt, Ende in der Planung von Welle 9. Geprüft:
Startaufstellung, Tastenkauf, Lane- und Karten-Tooltips, Bereit, Tempo,
Pause, Lane-Wechsel, Kamera-Reset, Einheitendetails und Einsatz auf
Bottom, Held anwerben, Items, Talentwahl, Angriffschampion mit
Ankündigung und Einsatz. Der erste Lauf endete in Runde 3, weil die
Werkzeugumgebung den Unity-Prozess beendete.
- Tooltip: Wertzeilen wie Godots GridContainer in drei Spalten ohne
Umbruch; vorher brach „7.500 / 7.500 (100 %)“ um.
- Motive bei 1280×720, 2560×1080 und 2560×1440 (JPEG), die der
U3D-Commit nannte, aber nicht enthielt; erzeugt vom U3-Stand e2aadcb.
- Befund für U4: Der Startbildschirm ist nicht in der Szene eingebunden.
- Tests: EditMode 29/29, PlayMode 13/13, Verify 718/0, Fingerabdrücke
der Bot-Partien unverändert (DCE95C96556F3A1A, 7B8E43AEFC0D60C5).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
269 lines
23 KiB
Markdown
269 lines
23 KiB
Markdown
# 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.
|