14 Commits

Author SHA1 Message Date
min
ed7310a532 feat(studio): +25 готовых механик из Вики (вся партия 3 — все остальные)
Добавлены все оставшиеся механики из TOOLBOX_KITS_FROM_WIKI.md:
Мир: зона опасности, шипы, светофор, грядка-урожай, падающие предметы.
Интерфейс: счётчик очков, HP-бар, дверь по коду (textbox), метка с именем,
  обратный отсчёт, 3D-стрелка-указатель.
Эффекты: костёр (particles fire), магнит монет.
NPC и бой (новая категория): преследователь, торговец (modal.dialog),
  мишень, враг с HP, волна врагов, диалог/кат-сцена, машина (vehicle:car).
Экономика (новая категория): магазин-кнопка, кликер, ключ+замок.

+2 категории китов (NPC и бой, Экономика). Всего ~37 китов.
Опущены «Главное меню» и «Экран загрузки» — требуют целой сцены, не «1 клик».
Все 45 скриптов прошли синтаксис-проверку, билд зелёный.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 09:55:32 +03:00
min
f270854795 feat(studio): +5 готовых механик (цветная плитка/лава/лифт/финиш/звук)
Партия 2 из TOOLBOX_KITS_FROM_WIKI.md:
- Цветная плитка — onTouch → смена цвета (self.setColor).
- Лава — onTouch/onUntouch → урон 15 HP/сек пока стоишь (player.damage).
- Лифт — onTick синусоида, ездит вверх-вниз 8 единиц.
- Финиш (победа) — onTouch → экран «ПОБЕДА!» + setInputBlocked.
- Звуковая плитка — onTouch → sound.play('coin') + подсветка.

game.self расширен: setColor(hex). Все 22 кита прошли синтаксис-проверку.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 09:31:49 +03:00
min
6938f83a3c fix(studio): декор двери поворачивается в ту же сторону (левосторонняя СК Babylon)
Ручка/филёнки уезжали на обратную сторону двери: формула поворота смещения
была правосторонняя, а Babylon mesh.rotation.y — левосторонняя. Единая rotY()
(wx=lx·c+lz·s, wz=-lx·s+lz·c) для полотна И декора → всё открывается синхронно
в одну сторону.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 09:23:35 +03:00
min
0e4fa89f40 fix(studio): декор двери (филёнки+ручка) вращается вместе с полотном
Декор-части находятся по имени (findOne), их локальное смещение от центра
полотна поворачивается вокруг той же петли в place() — теперь филёнки и ручка
открываются вместе с дверью, а не висят в проёме.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 09:20:15 +03:00
min
9a58c34303 feat(studio): красивая дверь (рамка+филёнки+ручка) + плавная анимация открытия
- Дверь теперь многочастная: полотно из тёмного дерева + 2 филёнки + золотая
  ручка + косяк-рамка (2 стойки + перемычка). Уходит в общую папку.
- Плавное открытие: постоянный onTick ведёт угол cur→target со скоростью
  ~0.5с на 90° (вместо мгновенного скачка). Поворот вокруг петли сохранён.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 09:16:46 +03:00
min
32cbb7bbe9 fix(studio): дверь поворачивается вокруг петли (как настоящая), а не отскакивает
Было: дверь сдвигалась вбок. Стало: вращение вокруг левой грани (петли) на
90°. Центр двери пересчитывается по дуге вокруг hinge (p0.z - halfW), плюс
self.rotate(angle) — дверь распахивается, как в реальности.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 08:51:36 +03:00
min
4906c82792 fix(studio): портал ищет второй портал по имени, дверь уезжает вбок
- Портал: вместо хардкода +8 по X — findOne('Портал B') в момент касания и
  телепорт к реальной позиции второго портала (его можно двигать куда угодно).
  findOne на старте давал null (sceneSnapshot через rAF) → искать в onTouch.
- Дверь по E: сдвиг вбок (+3 по X) вместо ухода вниз (выглядело как исчезновение).
  Текст подсказки «Открыть / закрыть».

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 08:46:34 +03:00
min
cfc79f325f feat(studio): +5 готовых механик из Вики (батут/ускорение/портал/исчезающая платформа/дверь)
Партия 1 из TOOLBOX_KITS_FROM_WIKI.md:
- Батут (пружина) — onTouch → setVy(20) подброс вверх.
- Лента ускорения — onTouch → x2 скорости на 3с.
- Портал-телепорт — пара порталов, onTouch → teleport ко второму.
- Исчезающая платформа — onTouch → через 1с пропадает, через 3с возвращается.
- Дверь по кнопке E — onInteract → дверь уезжает вниз/возвращается.

game.self расширен: setVisible(vis) / setCollide(can) (нужны для исчезающей
платформы). Все скрипты прошли синтаксис-проверку (new Function).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 07:41:25 +03:00
min
8b887e866a fix(studio): многочастные киты в папку + стартовая площадка задаёт спавн
- Кит из нескольких частей (сундук = тело+крышка) теперь кладётся в общую
  папку (folderManager.createFolder + assignToFolder), выделяется как группа.
  Раньше части лежали отдельно в корне.
- Кит «Стартовая площадка»: on-target скрипт телепортирует игрока НА площадку
  в начале игры (game.player.teleport через game.after 0.1с). Теперь игрок
  появляется на ней, а не в фолбэк-точке (0,0).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 02:46:25 +03:00
min
471af1cdeb fix(studio): сундук→счётчик монет через broadcast, удаление точки спавна + фолбэк 0,0
- Киты «Сундук» и «Счётчик монет» связаны через game.broadcast('coins',{add})
  + game.onMessage('coins') — раньше каждый кит в своём worker, счётчик не
  обновлялся (был globalThis, не работает между воркерами).
- Точку спавна теперь МОЖНО удалить: Delete (SelectionManager.deleteSelected
  обрабатывает type==='spawn' → scene.deleteSpawn) + ПКМ в дереве → контекст-
  меню «Навести камеру / Удалить точку спавна».
- Если точка спавна удалена (_spawnEnabled=false) — игрок появляется в
  (0, поверхность+2, 0). Постановка новой точки (setSpawnAtCamera) возвращает.
- spawnEnabled сериализуется в project_data.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 02:21:38 +03:00
min
7242e80602 fix(studio): кит «Конфетти» вылетает из позиции объекта, а не из центра сцены
Было: spawn кубиков в фикс. координатах (0,0.5,0) → конфетти сыпалось в
центре сцены, далеко от шара-источника (непонятно как связано). Стало:
кубики вылетают из game.self.position (позиции самого объекта-источника).
Описание кита уточнено: «фонтан конфетти из этого объекта».

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 02:10:03 +03:00
min
781c3cf945 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>
2026-06-05 01:56:51 +03:00
min
4284fef704 fix(studio): F-фокус на выделенном объекте, автофокус при вставке кита, двойной прыжок
- F в редакторе теперь фокусирует камеру на ВЫДЕЛЕННОМ объекте (раньше всегда
  летел в центр 0,0,0). Если выделения нет — центр сцены. Только в edit-режиме.
- focusOnSelection поддерживает userModel + запасной путь по позиции меша.
- Вставка кита из Тулбокса: объект выделяется И камера наводится на него
  (видно, куда добавилось) + переключение на инструмент «Выделить».
- Кит «Двойной прыжок» чинён: был setJumpPower (высокий прыжок) →
  game.player.setDoubleJump(true) (настоящий второй прыжок в воздухе по Space).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 01:45:40 +03:00
min
d62739d709 feat(studio): задача 17 — Toolbox «Готовые механики» (gameplay-киты)
Фаза T2: вкладка «Готовые механики» в Тулбоксе — 12 готовых китов
(Бег на Shift, Смена дня/ночи, Счётчик монет, Таймер, Приветствие, Сундук,
Чекпоинт, Конфетти, Парящая платформа, Вертушка, Двойной прыжок, Точка спавна).

- GameplayKits.js — каталог китов (scripts global/on-target + prims), getKit.
- ToolboxModal.jsx — section 'gameplay' + категории (Движение/Мир/Интерфейс/
  Эффекты) + карточки китов + поиск; клик → onPick('kit:<id>').
- KubikonEditor.jsx — insertGameplayKit: создаёт примитивы кита перед камерой,
  привязывает on-target скрипт к первому примитиву, global-скрипты добавляет в
  проект (upsertScript). Безопасность: киты наши, существующий sandbox.

Тест-игра «Игра за 5 минут» id=2544 (dev-режим is_test): town + применённые
киты (welcome/timer/coins/day-night/shift-run + сундук/чекпоинт/конфетти/
платформа). Проверено в плеере — все 5 скриптов исполняются без ошибок.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-05 01:16:35 +03:00