chore: e2e-test #28
Loading…
x
Reference in New Issue
Block a user
No description provided.
Delete Branch "chore/e2e-test-2026-06-07"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
e2e
Фаза 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>- Киты «Сундук» и «Счётчик монет» связаны через 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>- Портал: вместо хардкода +8 по X — findOne('Портал B') в момент касания и телепорт к реальной позиции второго портала (его можно двигать куда угодно). findOne на старте давал null (sceneSnapshot через rAF) → искать в onTouch. - Дверь по E: сдвиг вбок (+3 по X) вместо ухода вниз (выглядело как исчезновение). Текст подсказки «Открыть / закрыть». Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>Партия 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>1) scene.setColor теперь принимает {ref} (obj.color=hex), не только {id}. Светофор переключал цвета через obj.color, но ref игнорировался → не работал. 2) Грядка: добавлен obj.scale (scene.setScale → mesh.scaling). Урожай после сбора исчезает, растёт за 5с (scale 0→1) и зреет цветом красный→зелёный, при полном размере снова собирается. 3) Кит «HP-бар» теперь сам прячет стандартный HUD HP (setHpVisible false). Новый кит «Скрыть стандартный HUD HP» — отдельно прячет дефолтную полосу. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>1) Дверь по коду: красивая составная дверь (полотно+рамка+кодовая панель), поле ввода появляется ТОЛЬКО когда игрок в радиусе 6м (onTick по дистанции). 2) game.self.setLabel/clearLabel добавлены (кит «Метка с именем» падал 'setLabel is not a function'). 3) Плитка «Готовые механики» в тулбоксе считает киты динамически (GAMEPLAY_KITS.length), а не хардкод «12». 4) Консоль: ошибки/логи скриптов привязаны к источнику — справа строки кликабельная ссылка «📄 имя скрипта», открывает скрипт в редакторе (_log прокидывает scriptId/scriptName). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>1) NPC-преследователь/торговец/волна: spawnNpc('robot') → 'character-a' (модели 'robot' не существует в ModelTypes → spawnNpc возвращал null → ошибка). 2) Дверь по коду: верный код → ПЛАВНОЕ открытие вокруг петли (как дверь по E), декор-панели вращаются вместе с полотном. Раньше полотно уезжало вниз, декор оставался. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>1+2) Враг с HP / волна врагов: радиус удара 3.5 (NPC останавливался на followGap=2.5, урон-чек d<2.5 не срабатывал). Добавлена анимация атаки — R15Animator.attack (выпад рукой), npc.setAttacking, NpcManager.setAttacking. 3) Ключ исчезает при подборе: scene.setVisible теперь парсит ref ('primitive:N') — obj.visible=false слал {ref} без kind/id, поэтому ключ не пропадал. 4) Машина — остаётся рантайм vehicle:car (особенность транспорта). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>Leaderstats: HUD-таблица top-right (blur, сортировка по primary, топ-10, подсветка me, flash-инкремент). API game.leaderstats.define/set/add/get/ onChange + me.* (format number/time/short). LeaderstatsManager.js. Достижения: toast справа (4 редкости + звук + очередь, slide-in/out), кнопка- кубок слева-снизу → страница grid (locked grayscale+замок, hidden=?, прогресс- бар). API game.achievements.define/unlock/has/bindToStat/setButtonVisible/ openPage. bindToStat(id, stat, {gte/lte/eq}) — авто-unlock по лидерстату. Сохранение unlocked в localStorage по проекту. AchievementsManager.js. Интеграция: оба менеджера в BabylonScene (tick leaderstats в Play, resetRuntime при stop, serialize/load в project_data scene.leaderstats/achievements). worker- API + GameRuntime cmd-обработчики + мост leaderstats.onChange→worker (globalEvent leaderstatsChange) для bindToStat. Плеер пока НЕ портирован (по плану). Тест-игра «Сбор монет с достижениями» id=2616 (is_test): поляна + 30 монет + 3 стата + 5 достижений (3 через bindToStat). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>Новый кит (категория ui): определяет лидерборд (Очки primary + Время), время идёт само, очки растут от broadcast('score'|'coins'). Сохраняется в БД. Работает вместе со счётчиком монет/очков. Всего 47 китов. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>FloaterManager.js: object pool (30 billboard-планов с DynamicTexture), tween подъём+fade+покачивание, crit pop-scale, цвета damage/crit/heal/mana/miss, стек одинаковых по stackKey (×N), комикс-стиль (BAM!/KAPOW!/POW! на звезде). API game.fx.damageFloater(position, value, opts) — position {x,y,z} или ref/ 'player'. Интеграция: tick в render-loop, resetRuntime при stop. Тест-игра «Тренировочный полигон» id=2676. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>Pull request closed