From 781c3cf9451100a323827ee95cfcc375dbfb7777 Mon Sep 17 00:00:00 2001 From: min Date: Fri, 5 Jun 2026 01:56:51 +0300 Subject: [PATCH] =?UTF-8?q?fix(studio):=20=D0=B3=D0=BB=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D1=8B=D0=B5=20=D1=81=D0=BA=D1=80=D0=B8=D0=BF?= =?UTF-8?q?=D1=82=D1=8B=20(target=3Dgame)=20=D0=B2=D0=B8=D0=B4=D0=BD=D1=8B?= =?UTF-8?q?=20=D0=B2=20=D0=B4=D0=B5=D1=80=D0=B5=D0=B2=D0=B5=20=D0=B8=20?= =?UTF-8?q?=D1=83=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5=D0=BC=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Баг: фильтр дерева был scripts.filter(s => !s.target) → скрипты с target:'game' (главные скрипты игры) НЕ показывались в группе «Скрипты» (дерево писало «Скрипты (0)»), хотя в Play исполнялись и удалить их было нельзя. Теперь глобальный = нет target ИЛИ target==='game'. - ПКМ по «Точка спавна» в дереве → выбирает её (открывает свойства). - Кит «Точка спавна» → «Стартовая площадка» (точка спавна уже есть по умолчанию, дубль путал; её нельзя удалить — это by design). Co-Authored-By: Claude Opus 4.8 --- src/editor/HierarchyPanel.jsx | 10 ++++++++-- src/editor/engine/GameplayKits.js | 8 ++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/editor/HierarchyPanel.jsx b/src/editor/HierarchyPanel.jsx index ff263b6..d615b4c 100644 --- a/src/editor/HierarchyPanel.jsx +++ b/src/editor/HierarchyPanel.jsx @@ -786,7 +786,8 @@ const HierarchyPanel = ({ className={`${cl.item} ${selection?.type === 'spawn' ? cl.itemSelected : ''}`} onClick={() => onSelectSpawn?.()} onDoubleClick={() => { onSelectSpawn?.(); onFocusSelection?.(); }} - title="Точка спавна игрока" + onContextMenu={(e) => { e.preventDefault(); onSelectSpawn?.(); }} + title="Точка спавна игрока (ПКМ — выбрать и открыть свойства)" > Точка спавна @@ -1149,7 +1150,12 @@ const HierarchyPanel = ({ {/* === 📜 СКРИПТЫ === — только глобальные (без target). Скрипты с target отображаются под объектом-носителем. */} {(() => { - const globalScripts = scripts.filter(s => !s.target); + // Глобальные скрипты: без target ИЛИ target==='game' (строка). + // Раньше фильтр был `!s.target` → скрипты с target:'game' + // (главный скрипт игры) НЕ показывались в дереве и их нельзя + // было удалить, хотя в Play они исполнялись. + const isGlobalTarget = (t) => !t || t === 'game'; + const globalScripts = scripts.filter(s => isGlobalTarget(s.target)); return ( <> showCoins()); globalThis.__addCoins = (n) => { coins += (n||1); showCoins(); };` }], }, { - id: 'spawn-point', - name: 'Точка спавна', - desc: 'Зелёная платформа-маркер — место появления игрока. Поставь где нужно.', + id: 'start-pad', + name: 'Стартовая площадка', + desc: 'Светящаяся платформа-постамент для оформления зоны старта (точка спавна в проекте уже есть по умолчанию).', icon: 'flag', category: 'world', - prims: [{ type: 'cylinder', x: 0, y: 0.15, z: 0, sx: 3, sy: 0.3, sz: 3, color: '#36d57a', material: 'neon', name: 'Точка спавна' }], + prims: [{ type: 'cylinder', x: 0, y: 0.15, z: 0, sx: 3, sy: 0.3, sz: 3, color: '#36d57a', material: 'neon', name: 'Стартовая площадка' }], }, { id: 'checkpoint',