Skip to content

feat(presentation): improve RTS controls, art and unit animation - #154

Draft
cubetribe wants to merge 14 commits into
mainfrom
feat/generals-look-and-feel
Draft

cubetribe wants to merge 14 commits into
mainfrom
feat/generals-look-and-feel

Conversation

@cubetribe

@cubetribe cubetribe commented Oct 18, 2026 •

Copy link
Copy Markdown
Collaborator

Was & Warum

Der Branch verbessert die RTS-Präsentation und Bedienung: aufbereitete Art-Assets mit Teilanimationen, Infanteriebeinen, Turm-/Waffenbewegung, Sammlerladung und Abkippen, dauerhafte Wracks, Größenabstimmung, Licht/Bloom sowie kontextspezifische Kommandoleiste mit Angriffsbewegung, Patrouille, Eskorte und Formationen. Bewegung nutzt oktile Wegkosten und Platzmachen; Baustellen können an einen erreichbaren eigenen Bauer übergeben werden.

Die jüngste Korrektur beseitigt periodische Radar-Sprünge, unterbindet zufälliges Wegschauen der Infanterie beim Zielen und setzt gepoolte Animationszustände einschließlich Emission zurück. Elf neue Regressionstests prüfen auch die lokalen Art-Prefabs. Roadmap, Animationsdoku, Attack-Move-Angaben und Assetpaket-Stand wurden berichtigt. Entscheidungen D-110 bis D-119 und Einträge unter CHANGELOG.md [Unreleased] dokumentieren den Branch.

Validierung

  • 785/785 headless Simulationstests erfolgreich.
  • 729/729 Unity-EditMode-Tests erfolgreich, keine übersprungenen Tests.
  • 7/7 gezielte Unity-PlayMode-Tests erfolgreich: Kommandoleiste/Patrouille, Sammlerladung/Abkippen, Fahrtrichtung, Platzmachen Wracks sowie Builder-Arbeitsanimation.
  • Doku-Prüfung: 205 Markdown-Dateien und 5 Quality-JSONs erfolgreich.
  • macOS-Player mit Unity 6000.5.4f1 erfolgreich gebaut und gestartet. Auf Wunsch vor dem Commit gebaut, deshalb Stempel 3c8e6bf-dirty; laufende Partie mit Art-Modellen sichtbar. Dies ist ein lokaler, nicht notarisierter Testbuild.
  • Separates lokales Artpaket: 616 Dateien, 34 Prefabs mit Wracks; CRC, Meta-Paare, GUID-Verweise und Übereinstimmung mit lokalen Assets geprüft. Nicht hochgeladen, kein frischer Importtest.
  • Unabhängiges Read-only-Review: schmale Animationskorrektur geprüft; Testannahme zum Allianz-Radar korrigiert. Begrenzte zusätzliche Integrationsprüfung fand die Arbeitsanimation entfernter Builder; der nachfolgende Fix wurde unabhängig geprüft und gegen alten sowie korrigierten Code getestet. Keine vollständige Prüfung sämtlicher Branch-Dateien.

Offene Abnahme / Draft-Grund

Nicht gespielt im Sinne einer vollständigen manuellen Spielabnahme. Buildstart und automatisierte Szenenprüfungen ersetzen keine komplette Partie. Die visuelle Prüfung wird jetzt fortgesetzt. Restrisiken: Animationsqualität in längeren Gefechten, Art-Verteilung/frischer Import sowie Netzwerk-/Gefechtsdichte-Abnahme. Keine Freigabe der manuellen Abnahme und kein Meilenstein-Nachweis behauptet.

Der Branch enthält bereits bestehende Simulations- und Fingerprint/AI-Pin-Änderungen (D-116); diese sind beim Review ausdrücklich mitzuprüfen. Meine jüngste Korrektur verändert keine Simulationsregeln. Release-Auswirkung des Gesamtbranches: minor; jüngster Animationsfix: patch. Kein Versionsbump, Tag, Release oder Merge.

Integration mit main

6f36b7e integriert das bereits auf main gemergte KI-Persönlichkeitsupdate (D-114), ohne die gemeinsame Historie umzuschreiben. Konflikte in MatchBootstrap, Changelog und DecisionLog wurden unter Erhalt beider Änderungen aufgelöst. Unabhängiges Read-only-Review dieser Auflösung ohne Befund; anschließend 785 Simulationstests und 729 Unity-EditMode-Tests erfolgreich. Die Spielinstanz ist weiterhin der zuvor gestartete 3c8e6bf-dirty-Build, nicht als neu gebauter Integrationsstand ausgegeben.

Weiterer Beta-Schritt: Builder-Arbeitsanimation

36c3e9a: Lebender eigener Builder und tatsächliche Footprint-Reichweite sind Voraussetzung für die Arbeitsanimation. Bestehende View-Reichweitenhilfe wiederverwendet, keine neue Simulationsregel. Laufende-Szene-Regression mit echten Move-/Stop-Befehlen: alter Code schlägt mit 14° Armschwenk außerhalb der Reichweite fehl; korrigierter Code besteht. Abschließend 7/7 PlayMode-Tests und 729/729 EditMode-Tests grün, Doku-Prüfung erfolgreich. Unabhängiges Read-only-Review ohne Befund.

Visuelle Teilbeobachtung des gestarteten Players und klare Grenzen stehen in GrayboxLog GB-006: keine vollständige manuelle Partie, weitere native UI-Abfragen liefen in Timeouts. Der gestartete Player ist weiterhin der anfängliche Build, nicht der spätere Builder-Fix. Kein Merge durchgeführt.

cubetribe and others added 14 commits October 17, 2026 10:44
…l polish

Add dynamic procedural 32x32 hardware RTS cursors (default, move, attack, harvest, repair) and contextual right-click dispatch into RtsDeviceInput for responsive RTS controls.

Add color-coded animated ground click feedback pings to SelectionMarkerView and target rings under visible attack targets.

Add sound cues for building completion, base-under-attack warnings, low-power alerts, and round victory/defeat in UnitViewManager, ResourceBarHud, and MatchFrameHud.

Upgrade 3D visual presence with crystalline Aetherium clusters, progressive construction scaffolding, placement holograms, texture brightness preservation, high-contrast healthbars on hover, and sci-fi HUD styling.
The simulation measures headings mathematically (SimTrig.Atan2: 0 = +X,
counter-clockwise), Unity's yaw starts at +Z and turns clockwise. The
view fed the sim angle straight into Quaternion.Euler, which mirrored
every unit across the north-east diagonal: a tank driving east looked
north. ViewHeading is now the single place that maps a sim heading to a
Unity yaw (90 deg minus sim degrees).

EditMode tests pin the mapping for eight compass directions and an
oblique one. A PlayMode test drives six real prefabs in six directions
through pathfinding and asserts every moving view faces its measured
displacement; with the old mapping it fails (up to 180 deg off).

Refs D-110.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A recipe-driven Blender pass (tools/art/asset_pass.py, headless) splits
every model into named, pivoted nodes (Body, Turret, Gun, Wheel_*, Arm_*,
Spin_*, Scan_*), removes needles and floating debris, smooths the
faceted Tripo normals and lifts the far too dark base colour onto the
D-072 palettes; it also writes the _MSK mask and a new _EM emission map.
The source is always the untouched conversion outside the repo, so a
rerun is reproducible.

UnitRigAnimator drives those nodes from view-only input: turrets yaw
toward the visible attack target, guns recoil on visible shots, wheels
roll, the suspension pitches and leans, infantry bob in step, harvester
and builder arms work, dishes spin or sweep, and buildings breathe
through their light strips, faster while producing (own buildings only,
so the glow cannot leak production through the fog).

Import keeps the FBX hierarchy (a collapsed single root drops its axis
rotation) and forces bakeAxisConversion off (it turns the older FBX by
180 deg and survives in .meta otherwise). Art materials render double
sided because the Tripo shells have real gaps. ArtPreviewCapture
photographs every prefab through URP headless for review.

Verified locally: headless 768/768, EditMode 676/676, PlayMode 16/16;
all 34 prefabs inspected at rest and in a drive/fight pose. Not played.

Decision: D-110. Protocol and limits: docs/assets/AssetPass_2026-10-17.md

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The emissive accents of the art pass never glowed: the URP renderer had
no postProcessData since UrpProjectSetup created it, so URP rendered
every camera without post-processing; there was no volume profile, the
main camera had post-processing off, and URP's material validation
stripped _EMISSION because the GI flags were None.

UrpPostProcessingSetup (reflection only, D-061 allows no URP reference)
wires the renderer data, a bloom profile as the pipeline asset's default
volume (threshold 1.0, so only emission blooms) and the camera switch;
the scene generator calls it and the Bootstrap scene is regenerated.
The art pass now separates painted accent stripes from glowing ones so
light panels no longer burn out white.

The dark Alliance base was backlighting, not texture: the sun at
Euler(33, -128) stood behind every facade the north-facing RTS camera
shows. It now sits high on the camera side (50, 35) as Lighting.md asks
for the desert. The Alliance radar column is squashed to building
height.

ArtShowcaseTests places every building and unit of both factions in the
running match and photographs them through the main camera from 18, 30
and 42 m. Verified locally: headless 768/768, EditMode 676/676,
PlayMode 17/17. Not played.

Decision: D-111.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The four infantry models are single Tripo meshes without a skeleton, and
automatic bone weighting does not survive their open, multi-shell
geometry. The Blender pass now cuts thighs (pivot at the hip) and shins
(pivot at the knee) into Leg_* / Shin_* nodes; recipe boxes keep hanging
hands and side arms on the torso.

UnitRigAnimator drives a two-joint walk cycle from the measured view
speed: thighs swing +-25 deg in counter-phase, knees fold during the
swing, the hips drop by exactly the shortening of the spread legs so
the feet stay on the ground, and the torso kicks back on a visible
shot. Cadence is capped at 3.2 steps/s: views are scaled to ~1 unit
while the sim moves infantry 4 cells/s, and a slide-free cadence of ~9
steps/s reads as twitching.

UnitMotionPresentationTests also records the walking soldier as a frame
strip. Verified locally: headless 768/768, EditMode 676/676, PlayMode
17/17. Not played.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Every building view is scaled to the width of its 3x3 footprint, which
made the slender defence towers as wide as a factory and about four
soldiers tall. The Blender pass now adds a flat concrete pad sized so
that, after that scaling, a tower stands 0.7 footprints high - roughly
twice a soldier, about a battle tank. The pad fills the blocked cells
instead of leaving them an invisible wall; its UVs point at a calm,
unsaturated texel, so it needs no extra material.

The footprint itself stays 3x3: shrinking it for towers is a rules
change (placement, pathfinding, AI, fingerprint and determinism
baselines) and is left open for the owner.

Decision: D-112.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The integration field priced diagonal steps through an integer division
(14 / 10 = 1) as cheap as straight ones, so units drove staircases. Costs
are now octile 10/14. Heading follows the path instead of the separation
push (at most 30 degrees per tick), spacing is per unit class, large
vehicles get group slots with a free rim, and idle own units step aside
for an equal or larger moving unit.

Rule revision V4; canonical AI pin 2726 -> 2721. D-116.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sites were bound to the player's lowest-index builder and only that
builder's reach was checked, so a second builder could never build
(#135 was misdiagnosed as the build-zone radius). When the bound builder
is missing or out of reach, the site now passes to the lowest-index own
builder that is in reach. Deterministic ascending scan; byte-identical
with a single builder, so fingerprints and the AI pin do not move.

Replaces the lowest-index-only part of D-085. D-118.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A UI Toolkit command bar for selected units (D-117): type chips, icon
grid with hotkeys and tooltips, attack-move, patrol, guard, scatter and
five formations as client orders over Move/Stop/AttackTarget, so the
command register stays frozen.

Buttons that do not apply are hidden rather than greyed: harvesters and
builders get no combat orders, harvesters show a cargo bar and their
state instead, and W/K/J/M act only on the armed part of a selection.
Placing a building sends the selected builder, and right-clicking an own
site sends selected builders to its approach cell (D-118). The escort
holds an own harvester at the refinery while its unload animation plays.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ings

- Every asset gets a wreck variant that the view switches to on death,
  plus ambient motion: dust trails, chimney smoke, idle turret sweeps
  (D-115).
- One scale rule per class keeps vehicle proportions; the selection ring
  follows the model size (D-113).
- Harvesters carry a visible ore load with Aetherium crystals that grows
  with CargoAE; on unload the Legion bed (new Bed part) tips back and the
  Alliance robot leans back while the load slides out.
- Legion power plant, vehicle factory, lab and barracks were tanks or
  broken Tripo meshes; they are now built procedurally from new concept
  art (tools/art/procedural). Hunyuan3D was tried and rejected because its
  licence excludes the EU (D-119). glb_to_unity_fbx gains --keep-slivers.

The art binaries stay local (gitignored); the asset package must be
rebuilt to share them.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant