fix(vehicle): машина едет видимо — исключить кузов из LOD-freeze
Some checks failed
CI / Lint (pull_request) Successful in 1m21s
CI / Build (pull_request) Successful in 2m7s
CI / Secret scan (pull_request) Failing after 5m11s
CI / PR size check (pull_request) Successful in 8s
CI / Deploy to S1 + S2 (pull_request) Has been skipped

Регрессия: LOD-оптимизация (_updateModelLOD) замораживала worldMatrix
далёких моделей. Кузов машины (modelManager-инстанс) под неё попадал, а
после парентинга к chassisNode его root.position стала локальной (≈0,0,0)
→ LOD мерял дистанцию неверно и замораживал машину → меш переставал
следовать за коллайдером (едешь на невидимой машине, видимая стоит).
Фикс: помечаем кузов _spawnedAtRuntime=true (+_isVehicleBody) при спавне —
LOD его не трогает (как зомби/динамику).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
min 2026-06-17 09:57:57 +03:00
parent 89bdeff657
commit 22026f2f1d

View File

@ -76,6 +76,14 @@ export class VehicleManager {
veh.bodyInstanceId = bodyId;
const inst = this._models.instances.get(bodyId);
if (inst && inst.rootMesh) {
// Кузов машины — динамический объект: им двигает VehicleManager
// (через парентинг к chassisNode). Исключаем из LOD-freeze, иначе
// freezeWorldMatrix замораживает меш и он перестаёт следовать за
// chassisNode → «едешь на невидимой машине, видимая стоит».
// (LOD меряет дистанцию по локальной root.position запарентенного
// кузова ≈0,0,0 — некорректно, и замораживает машину.)
inst._spawnedAtRuntime = true;
inst._isVehicleBody = true;
// Габариты AABB + вертикальный offset кузова СЧИТАЕМ ДО парентинга
// (в мировых координатах, кузов ещё в (x,y,z)).
try {