champions-of-luneraria/docs/port/U3-UI.md
Martin Stickelbroeck d590fdebeb U4-Nachtrag: Startbildschirm in der Szene, Rückkehr aus der Partie
Befund aus dem Spieltest des U3-Nachtrags: Nichts legte LuneNetPlay in die
Szene. Das Spiel begann direkt in einer Partie, der Startbildschirm aus U4
war unerreichbar, und der Verlassen-Dialog beendete das Spiel statt zum
Hauptmenü zu führen.

- LuneWorldBuilder legt LuneNetPlay auf das Match-Objekt; Szene neu gebaut.
- Das Menü bekommt ein eigenes UIDocument über dem HUD. Vorher hing es an
  keinem Panel, und das HUD hätte es beim ersten Partiestart geleert.
- Rückkehr über „Menü“ → „Zum Menü“: HUD und Aufstellungsflächen weg,
  Sitzung beendet, leere Karte. Die Kamera ruht hinter dem Menü und beginnt
  jede Partie ungedreht. Die Bund-Wahl ist markiert, die Knopfreihe passt
  in die Tafel.
- Tests und Benchmark ohne Startbildschirm (LuneMatchDriver.DirectStart,
  -luneBenchmark); Bot-Partien und Fingerabdrücke unverändert.
- Neu: LuneSmoke (-luneSmoke <Ordner>), Selbsttest eines Players nach
  lune_smoke.gd. StartScreenTests führt ihn im Editor aus.
- Tests: EditMode 29/29, PlayMode 14/14 (StartScreenTests 26/26), Verify
  718/0, Fingerabdrücke DCE95C96556F3A1A und 7B8E43AEFC0D60C5 unverändert.
  macOS-Player: Selbsttest 26/26, Bilder in
  docs/port/screenshots/u4/startbildschirm/. Ein zusammenhängender
  PlayMode-Lauf auf dem Endstand und ein Player-Benchmark stehen aus, weil
  der Mac zugeklappt schlief (siehe U4-NETWORK.md).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-08 05:37:51 +02:00

23 KiB
Raw Blame History

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ü: „Menü“ fragt nach und kehrt zum Startbildschirm zurück (seit dem U4-Nachtrag, U4-NETWORK.md). Bis dahin fehlte der Startbildschirm in der Szene, und „Menü“ beendete 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; behoben im U4-Nachtrag (U4-NETWORK.md)

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 (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)

Bekannte Grenzen

  • Hauptmenü: Der Startbildschirm mit Netzwerk-Host/Join gehört zu U4. Seit dem U4-Nachtrag ist er in der Szene; das Spiel beginnt dort, und „Menü“ kehrt nach Rückfrage dorthin zurück. Zur Zeit von U3 und des Spieltests fehlte er.
  • 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).
  • Schriftgewichte wie in G3 absichtlich Regular 400; echte Gewichte sind eine U5-Entscheidung.