fix(studio): объекты больше не вываливаются из папки после Play/Stop (folderId в serialize)
Корень: serialize примитивов/моделей/userModel НЕ сохранял folderId. При Play→Stop сцена восстанавливалась из снапшота без группировки → все части кита (светофор/шипы/дверь) вываливались из папки в общие «Примитивы». Добавлен folderId в serialize всех 3 менеджеров + восстановление в loadFromArray (model/userModel явно, primitive через opts.folderId). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
6ece149924
commit
018fce474b
@ -526,6 +526,9 @@ export class ModelManager {
|
||||
opacity: typeof data.opacity === 'number' ? data.opacity : 1,
|
||||
tint: data.tint || null,
|
||||
name: data.name || null,
|
||||
// folderId — принадлежность к папке (иначе модели вываливаются
|
||||
// из папки после Play/Stop). Баг 2026-06-05.
|
||||
...(data.folderId != null ? { folderId: data.folderId } : {}),
|
||||
// Параметры геймплея (HP, скорость врага, лимит спавнера и т.п.)
|
||||
gameplayParams: data.gameplayParams || null,
|
||||
});
|
||||
@ -768,6 +771,7 @@ export class ModelManager {
|
||||
if (m.tint) data.tint = m.tint;
|
||||
if (m.name) data.name = m.name;
|
||||
if (m.gameplayParams) data.gameplayParams = m.gameplayParams;
|
||||
if (m.folderId != null) data.folderId = m.folderId; // восстановить папку
|
||||
if (data.opacity != null || data.tint) this._applyMaterialOverrides(data);
|
||||
}
|
||||
// Гарантируем что _nextInstanceId стоит ПОСЛЕ максимального восстановленного id —
|
||||
|
||||
@ -945,6 +945,9 @@ export class PrimitiveManager {
|
||||
anchored: d.anchored,
|
||||
mass: d.mass,
|
||||
name: d.name || null,
|
||||
// folderId — принадлежность к папке. БЕЗ него примитивы вываливались
|
||||
// из папки после Play/Stop (снапшот терял группировку). Баг 2026-06-05.
|
||||
...(d.folderId != null ? { folderId: d.folderId } : {}),
|
||||
// locked — защита от выделения/перемещения (Фаза 5.11).
|
||||
...(d.locked ? { locked: true } : {}),
|
||||
// id пользовательской текстуры (картинка из AssetManager).
|
||||
|
||||
@ -599,6 +599,8 @@ export class UserModelManager {
|
||||
// instanceId — чтобы target-скрипты могли стабильно ссылаться
|
||||
// на конкретный инстанс после перезагрузки.
|
||||
instanceId: inst.instanceId,
|
||||
// folderId — принадлежность к папке (иначе вываливается после Play/Stop).
|
||||
...(inst.folderId != null ? { folderId: inst.folderId } : {}),
|
||||
});
|
||||
}
|
||||
return arr;
|
||||
@ -663,7 +665,13 @@ export class UserModelManager {
|
||||
forceInstanceId: item.instanceId,
|
||||
},
|
||||
);
|
||||
if (id != null) loaded++;
|
||||
if (id != null) {
|
||||
loaded++;
|
||||
if (item.folderId != null) { // восстановить папку
|
||||
const inst = this.instances.get(id);
|
||||
if (inst) inst.folderId = item.folderId;
|
||||
}
|
||||
}
|
||||
} catch (e) {
|
||||
console.warn('[UserModelManager] failed to load instance', item, e);
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user