Editor (AnimPreviewState):
- __tpose__ AnimClip mit Einzel-Frame-Track für Root-Joints (behebt NPE in
ClipAction.doInterpolate; leerer Clip hatte null-tracks-Array)
- Beim Laden: eingebettete Clips automatisch strippt und in src+bin speichern;
danach __tpose__ abspielen → Charakter steht in Bind-Pose
- stopAll(): zurück zur T-Pose statt SkinningControl deaktivieren
- Achsen-Indikator immer fest auf (0,0,0) statt bounding-box-Mitte
Spiel (WorldScene):
- CullHint.Always beim Laden, Inherit nach Animation-Setup (kein liegender Charakter)
- stripEmbeddedClips: speichert jetzt in src + bin + build (alle bekannten Pfade);
besseres Logging bei fehlendem Pfad
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- WorldScene: Charakter wird beim Laden mit CullHint.Always versteckt, erst nach
setupAnimationContext (idle läuft) wieder sichtbar
- WorldScene: stripEmbeddedClips nutzt jetzt AnimationLibrary.findAssetRoot() statt
hartkodierter Pfad-Liste; besseres Logging wenn Datei nicht gefunden
- AnimPreviewState: Modell beim Laden versteckt (CullHint.Always), erst bei playClip
sichtbar; stopAll versteckt Modell wieder
- PlayerInputControl: tryPlay setzt Action VOR SkinningControl-Aktivierung
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
In diesen Mixamo-Exporten ist Local-Y die Vorwärts-Richtung (nicht Höhe),
Local-Z die Höhe. Bisheriger Code fror Z=0 ein → Charakter 1m zu tief.
Und Y war frei → Lauf-Drift blieb.
Neue Logik:
X → 0 (kein Seiten-Drift)
Y → 0 für Lauf-Clips (running/walking/sprinting/running_jump), normalisiert sonst
Z → vollständig frei (Höhe und Setz/Aufsteh-Bewegung erhalten)
Nur der flachste Bone (Hips) wird modifiziert, alle anderen unberührt.
Clips vollständig neu importiert mit korrektem Snap.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
RootDriftCompensatorControl entfernt, AnimationLibrary auf Stand 7dcf16f
zurückgesetzt (snapRootBoneXZ friert XZ auf frame0-Wert ein, Early-Return
bleibt, kein Clip-Clearing in applyAllTo).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Neues Control auf dem Modell-Spatial (nach AnimComposer hinzugefügt):
- Läuft nach AnimComposer aber vor SkinningControl → liest aktuellen Frame
- Findet den flachsten Knochen mit nicht-nullem Model-Space XZ (= Hüft-Bone)
- Verschiebt den Modell-Spatial in die entgegengesetzte Richtung
- Mesh bleibt immer über der Physik-Kapsel; Y (sit_down/Jump) wird nicht berührt
- Animations-Daten, J3Os und AnimationLibrary bleiben unverändert
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Rigs wo Hips auf Tiefe 1 liegt (Kind des Root) wurden bisher nicht gesnappt
weil nur Tiefe-0-Joints gefunden wurden. Jetzt wird die kleinste Tiefe unter
allen Joints mit Translation-Track gesucht und nur diese Ebene eingefroren.
Passt zu beiden Rig-Strukturen (Root-Translation und Hips-Translation).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Beim Anwenden eines Clips auf ein Modell (AnimationLibrary.applyTo) wird der
Root-Joint-Track jetzt in-memory gepatcht: X und Z werden auf Frame-0-Wert
eingefroren, Y (Höhenachse) bleibt vollständig frei. Damit bleibt das Mesh
immer über der Physik-Kapsel, sit_down/Jump/Bounce laufen korrekt weiter.
J3O-Dateien werden nicht verändert.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
TreeGeneratorState, PalmGeneratorState und EzTreeState zeigten noch auf
editor-assets/ für Models, Texturen und Impostors. Alle Pfade auf
blight-assets/src/main/resources/ umgestellt:
- models/ → Models/
- textures/ → Textures/impostor/
- Palmen → trees/palm/ (konsistent mit EzTree)
- ASSET_ROOT/BLIGHT_ASSET_ROOT-Doppelung in EzTreeState bereinigt
- verbleibende System.out/err durch log.warn/error ersetzt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>