# Туториал: добавить новый тип блока Делаем новый воксельный блок (по аналогии с grass-snow, greystone и др.). Время: ~30 минут. ## Что у нас есть Существующие типы блоков описаны в `src/editor/engine/CONST/blockTypes.js`. У каждого блока: - `id` (uint16 — компактное хранение в чанках) - `name` (показывается в инспекторе) - `texture` (имя файла из `public/kubikon-assets/blocks/`) - `solid` (true/false — игрок проходит сквозь?) - `transparent` (для стекла — рендер с alpha) - доп. свойства: `breakable`, `gravity`, `gluon` и т.д. ## Шаг 1: Текстура Текстуры блоков — PNG 256x256, лежат в `public/kubikon-assets/blocks/`. Возьми готовую (Kenney воксельные тайлсеты — CC0) или нарисуй сам. Положи как `<имя>.png`, например `my_cool_brick.png`. ## Шаг 2: Регистрация типа В `src/editor/engine/CONST/blockTypes.js` добавь: ```javascript export const BLOCK_TYPES = [ // ...существующие... { id: 42, // следующий свободный uint16 name: 'Мой кирпич', texture: 'my_cool_brick.png', solid: true, breakable: true, breakTime: 2.0, // сек. чтобы сломать киркой category: 'материалы', }, ]; ``` ## Шаг 3: Проверь в редакторе ```bash npm run dev # открой http://localhost:5174/edit/sample (standalone-режим) ``` В сайдбаре «Блоки» → категория «материалы» → твой кирпич должен появиться. Клик → выбор → ставь на ландшафт. ## Шаг 4: Тонкая настройка Самое частое — текстура повёрнута/растянута. Открой `src/editor/engine/BlockManager.js`, найди `_buildFace()`. По умолчанию UV-маппинг 1 текстура на грань 1м×1м. Если нужно повторение — поменяй `uvScale`. Для не-кубических блоков (ступени, плиты) — см. `BlockShape.js`. ## Шаг 5: Скрипты могут спавнить твой блок Если блок должен быть доступен в `game.scene.placeBlock(type, x, y, z)` — добавь его id в whitelist `src/editor/engine/scripts/ScriptSandboxAPI.js:ALLOWED_BLOCK_IDS`. ## Шаг 6: PR ```bash git checkout -b feature/cool-brick-block git add public/kubikon-assets/blocks/my_cool_brick.png \ src/editor/engine/CONST/blockTypes.js git commit -m "feat: добавить блок 'Мой кирпич' (id=42)" git push origin feature/cool-brick-block ``` Открой PR на https://git.rublox.pro/rublox/studio/pulls. ## Подсказки - **Не используй id уже занятые** — `grep -c 'id:' blockTypes.js` покажет сколько типов есть. - **Не помещай большие текстуры** — 256x256 максимум. Иначе текстурный атлас не влезет в GPU. - **`solid: false` для жидкостей** — игрок проходит сквозь, но рендерится с прозрачностью. - **`gravity: true` для песка** — блок падает если под ним пусто. ## Что делать если блок не появляется 1. Проверь Console (F12) — есть ли ошибка про parsing JSON или texture not found. 2. Проверь что `texture` совпадает по имени с файлом в `public/kubikon-assets/blocks/`. 3. Проверь что `id` уникальный — два блока с одним id ломают map. 4. Очисти localStorage браузера (там кешируется состояние редактора): `localStorage.clear()` в Console.