fix(studio): глобальные скрипты (target=game) видны в дереве и удаляемы

Баг: фильтр дерева был scripts.filter(s => !s.target) → скрипты с
target:'game' (главные скрипты игры) НЕ показывались в группе «Скрипты»
(дерево писало «Скрипты (0)»), хотя в Play исполнялись и удалить их было
нельзя. Теперь глобальный = нет target ИЛИ target==='game'.

- ПКМ по «Точка спавна» в дереве → выбирает её (открывает свойства).
- Кит «Точка спавна» → «Стартовая площадка» (точка спавна уже есть по
  умолчанию, дубль путал; её нельзя удалить — это by design).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
min 2026-06-05 01:56:51 +03:00
parent 4284fef704
commit 781c3cf945
2 changed files with 12 additions and 6 deletions

View File

@ -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="Точка спавна игрока (ПКМ — выбрать и открыть свойства)"
>
<span className={cl.itemIcon} style={{ display: 'inline-flex' }}><Icon name="flag" size={14} /></span>
<span className={cl.itemLabel}>Точка спавна</span>
@ -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 (
<>
<GroupRow

View File

@ -74,11 +74,11 @@ game.every(0.3, () => 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',