Корень: serialize примитивов/моделей/userModel НЕ сохранял folderId. При
Play→Stop сцена восстанавливалась из снапшота без группировки → все части
кита (светофор/шипы/дверь) вываливались из папки в общие «Примитивы».
Добавлен folderId в serialize всех 3 менеджеров + восстановление в loadFromArray
(model/userModel явно, primitive через opts.folderId).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Зона опасности / триггеры (canCollide:false) ловились camera-clamp, и камера
прыгала к игроку внутри зоны. Причина: metadata примитива НЕ содержал
canCollide, а PlayerController._clampCameraToWorld проверяет md.canCollide.
Добавлен canCollide в metadata меша (+ синк при updateInstance).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
При scale-гизмо mesh.scaling тянул faceUV → studs превращались в полосы.
Фикс: во время drag прячем studs-текстуру (плоский цвет), в dragEnd меш
пересоздаётся с правильным faceUV. _recreateMesh для studs пересоздаёт
материал заново (свежий тайлинг + восстановление текстуры).
GizmoController: + onDrag (live) колбэк для scale.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Тайлинг studs на кубе через faceUV (per-face) — кружки одного размера на
всех гранях, не растягиваются на длинной стороне (баг на брусе 10×1×1).
_studsCubeFaceUV считает UV каждой грани по её реальным размерам.
- studDensity — плотность кружков (множитель): инспектор «Размер studs»
Крупные(0.5)/Средние(1)/Мелкие(2)/Меньше(4). Для пола мелкие, для кирпича
крупные. Проброс через data/_studsDims/faceUV/_studsTiling, сериализация,
updateInstance(patch.studDensity)→пересоздание меша.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
- Текстура studs v4: круглые кружки с усиленным объёмом (normal strength 4.0,
запечённый блик/тень) + контактная тень от каждого кружка. Фон 0.97 — цвет
остаётся сочным. emissive 45% от цвета на примитивах (Roblox-look).
- Версионные имена файлов (studs_v4_*) — обход browser-кэша Babylon.
- Color-пикер блоков: в палитре при выборе окрашиваемого блока (studs-block)
под категориями появляется ряд из 8 лего-цветов + input «свой цвет».
BabylonScene.setActiveBlockColor → addBlock(...,color) при постановке.
- DEV-хук ?dev=<имя> (localhost): грузит /dev-<имя>.json в редактор для
локального теста без БД (на проде неактивен).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1) Билборд (Магазин апгрейдов, ID=1906): текст и иконки отрисовывались
зеркально из-за того что BILLBOARDMODE_ALL разворачивает FRONT-сторону
plane так что мы видим back-side с зеркальным UV. mesh.scaling.x=-1
игнорируется billboardMode. Решение: отключить billboardMode, вместо
него каждый кадр в onBeforeRenderObservable ставим mesh.rotation.y =
atan2(dx,dz) + PI — front смотрит на камеру → UV рисуется правильно.
2) Autosave перезаписывал реальный проект пустой стартовой сценой при
reload страницы (баг #1893, #1905 — оба перетёрты). Добавил
sceneLoadingRef guard в doSave: пока sceneLoading=true, autosave
запрещён.
3) Запрет публикации без обложки — фронт (alert + open Settings) и бэк
(400 thumbnail_required если pd.thumbnail < 100 байт).
4) Scripting API:
- шорткат: game.scene.spawn('billboard',...) вместо
'primitive:billboard' (применяется ко всем примитивам)
- проброс template/face/content/elements в scene.spawn для билбордов
- PrimitiveManager.updateInstance — поддержка billboardOpts patch'а
5) Тест-игра 'Магазин апгрейдов' ID=1906 — 4 shop-item билборда +
banner + shop-purchase кнопка 'Сбросить апгрейды' + HUD рубликов.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Задача 01 из 1 - Неделя 4/ЗАДАЧИ РУБЛОКС. P0-приоритет: без таблиц
с кнопками невозможны симуляторы, тайкуны, фермы.
Новое:
- engine/BillboardUiManager.js — 4 пресета (shop-item, shop-purchase,
banner, sign), 18 иконок, DynamicTexture-рендер, UV-hit-test
- PrimitiveTypes: новый тип 'billboard' в категории 'gameplay'
- PrimitiveManager: case billboard в _createMeshForType (Plane), init
через applyToMesh, billboardOpts в updateInstance
- BabylonScene: PointerEventTypes-handler для кликов с _isPlaying-чеком
и pointer-lock поддержкой
- GameRuntime: команды billboard.set/update/onClick, callback через
sandbox.sendEvent('billboardClick')
- ScriptSandboxWorker: пространство game.billboard.{set,update,onClick}
- BillboardEditorModal.jsx — модалка с живым canvas-превью, 8 готовых
градиентов + кастомные пикеры, дропдаун из 18 иконок
- InspectorPanel: кнопка 'Редактировать табличку…' для billboard-примитива
- KubikonEditor: проброс модалки через onEditBillboard prop
- Icon.jsx: SVG prim-billboard
Два режима ориентации: 'camera' (BillboardGui-аналог, всегда смотрит
на игрока) и 'fixed' (SurfaceGui-аналог, прикреплён к поверхности).
Клик-детекция через ray-pick → UV → пиксели текстуры → поиск кнопки
по AABB; работает с пиксельной точностью даже при повороте камеры.
Документация: RUBLOX_STUDIO_FUNCTIONS.md раздел 1.25.
Тестовая игра 'Магазин апгрейдов' (4 таблички + банер + HUD) — МИН
соберёт в студии drag-n-drop'ом.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Большой консолидирующий коммит после поднятия studio.rublox.pro (28 мая 2026).
Содержит изменения которые делались в процессе подготовки прод-окружения:
Фиксы импортов после выноса из minecraftia:
- Массовая замена путей ../../components → ../components (40+ файлов в src/community/, src/admin-preview/)
- Замена ../KubikonEditor/ → ../editor/, ../KubikonStudio/ → ../community/, ../AdminPreview/ → ../admin-preview/
- API.js скопирован из минки целиком (было 8 экспортов, стало 312)
- Добавлены PLAYER_URL, MyButton_1, недостающие компоненты
- Заменены require() на статические ES-imports в BabylonScene, PrimitiveManager, GameRuntime (Vite не поддерживает CJS require)
Структура ассетов:
- public/kubikon-templates/ → public/assets/kubikon-templates/
- public/kubikon-learn/ → public/assets/kubikon-learn/
- (код искал в /assets/, файлы лежали без /assets/)
Навигация роутов внутри студии:
- /kubikon-studio/docs → /docs (90+ навигационных вызовов sed-replaced)
- /kubikon-editor/X → /edit/X, /kubikon/play/X → /play/X, /kubikon/gd/X → /gd/X
UI:
- Новый компонент StudioHeader (61px, как в минке) + копия favicon
- WithHeader wrapper в App.jsx для всех страниц кроме fullscreen-редактора/плеера
- SSO ticket-flow в AuthContext (auto-redeem #ticket= при загрузке)
- Тёмная тема карточек игр в ВИКИ (фон #1c2231 вместо #fff, картинка впритык)
Документация:
- docs/ONBOARDING.md — путь нового контрибьютора от нуля до PR
- docs/TUTORIAL_ADD_SCRIPT_API.md — как добавить game.* API
- API_USAGE.md — список эндпоинтов backend
- README в подпапках engine/, engine/terrain/, engine/voxel/, engine/robloxterrain/, engine/types/
.gitignore:
- public/wiki/ исключён (73МБ PNG, будут на CDN отдельной задачей)
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>