289bbbba1d6f817536e2fde6b4583c6d49a50597
Ruling 51: #load() rief addCollider() auch für Chunks ohne jede Kollisions- geometrie auf (offenes Wasser: 4_6, 4_10, 5_6, 5_10 — an den Rohdaten nachgezählt). Das lieferte nur eine Fremdwarnung aus ColliderRegistry und ein handle mit id:-1, das nie ready wird. addCollider läuft jetzt nur noch, wenn die collide-Gruppe Kinder hat; #unload und isReadyAt behandeln einen Eintrag ohne handle korrekt (kein removeCollider nötig, sofort "bereit"). Ruling 52: lastSafe hielt sich an der Höhe fest (p.y > -1), nicht am tatsächlichen Bodenkontakt — der Scheitel eines Sprungs oder ein Dach zählten als "sicher". Prüfung im Submodul ergab: playerIsOnGround (public, via setOnGround() nur aus snapToGround() auf true gesetzt) mit passendem Getter getIsOnGround(). lastSafe aktualisiert sich jetzt nur noch bei echtem Bodenkontakt. Ruling 53: setSkipCapsuleCollision(true) schaltet nur die horizontale Kollision ab, applyGravity läuft unabhängig weiter — die "Schwebephase" war freier Fall. Die alte 15s-Zeitschranke schaltete die Kollision ohne vorhandenen Boden scharf, was bei dauerhaft fehlendem Chunk in eine endlose Fall-Auffang-Schleife lief. Die Figur wird jetzt aktiv auf Spawnhöhe gehalten, bis ihr Chunk bereit ist; nach 15s nur noch eine einmalige Warnung, kein Verhaltenswechsel. Per künstlicher 8s-Verzögerung gemessen: Höhe blieb über den gesamten (durch Worker-Pool-Stau auf über 14s verlängerten) Wartezeitraum innerhalb 0,004 Einheiten der Spawnhöhe. Neue Tests in tests/streaming.test.js decken Ruling 51 ab (ChunkStreamer mit gemocktem fetch/player/scene); Ruling 52/53 sind Physik-Verhalten des Submoduls und über den Browser verifiziert (Bericht: task-8-report.md). Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Languages
TypeScript
44.1%
JavaScript
40.9%
Python
11.2%
HTML
3.3%
CSS
0.5%