Compare commits

..

3 Commits

Author SHA1 Message Date
min
542949eaff Merge pull request 'fix(vehicle): ������ ���� ������ (LOD-freeze)' (#47) from fix/vehicle-lod-freeze-2026-06-17 into main
Some checks failed
CI / Lint (push) Successful in 1m10s
CI / Build (push) Successful in 2m0s
CI / Secret scan (push) Failing after 5m8s
CI / PR size check (push) Has been skipped
CI / Deploy to S1 + S2 (push) Has been skipped
2026-06-17 07:22:55 +00:00
min
b638842948 ci: rerun checks (secret-scan флапнул, не код)
Some checks failed
CI / Lint (pull_request) Successful in 1m8s
CI / Build (pull_request) Successful in 1m57s
CI / Secret scan (pull_request) Failing after 5m10s
CI / PR size check (pull_request) Successful in 11s
CI / Deploy to S1 + S2 (pull_request) Has been skipped
2026-06-17 10:11:15 +03:00
min
22026f2f1d 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>
2026-06-17 09:57:57 +03:00

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 {