diff --git a/src/editor/engine/ModelManager.js b/src/editor/engine/ModelManager.js index d457be9..e52bba2 100644 --- a/src/editor/engine/ModelManager.js +++ b/src/editor/engine/ModelManager.js @@ -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 — diff --git a/src/editor/engine/PrimitiveManager.js b/src/editor/engine/PrimitiveManager.js index 433f51f..8a50c0c 100644 --- a/src/editor/engine/PrimitiveManager.js +++ b/src/editor/engine/PrimitiveManager.js @@ -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). diff --git a/src/editor/engine/UserModelManager.js b/src/editor/engine/UserModelManager.js index 9e8629a..7af7734 100644 --- a/src/editor/engine/UserModelManager.js +++ b/src/editor/engine/UserModelManager.js @@ -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); }