/** * templates.js — шаблоны игр для KubikonStudio. * * Каждый шаблон — это готовый снимок project_data, СГЕНЕРИРОВАННЫЙ * самим движком: настоящий гладкий ландшафт (RobloxTerrain / Surface * Nets + биомы + деревья/трава/цветы), а для геймплейных — плюс * примитивы и скрипты. * * JSON-снимки лежат в ./template-data/.json. Их собрал инструмент * dev-tools/wiki-shots/gen-templates.js: открывает редактор, запускает * window.__robloxTest(size, params) с пресет-параметрами под жанр, * сериализует результат через BabylonScene.serialize(). * * Чтобы пересобрать шаблоны (новые параметры/декор): * 1) правишь CONFIGS в gen-templates.js * 2) node gen-templates.js — пересоберёт JSON * 3) копируешь template-data/*.json сюда * 4) node shoot-template.js — пересоберёт превью-картинки * * build() шаблона возвращает project_data — его сразу можно * отдать в createProject({ project_data: JSON.stringify(build()) }). */ import plain from './template-data/plain.json'; import hills from './template-data/hills.json'; import island from './template-data/island.json'; import city from './template-data/city.json'; import village from './template-data/village.json'; import platformer from './template-data/platformer.json'; import shooter from './template-data/shooter.json'; import racing from './template-data/racing.json'; // build() отдаёт глубокую копию — чтобы создание игры из шаблона // не мутировало общий импортированный объект. const snap = (data) => () => JSON.parse(JSON.stringify(data)); /** Список всех шаблонов с метаданными — рендерится в KubikonStudio. */ export const TEMPLATES = [ // === Геймплейные (с готовой логикой) === { id: 'platformer', title: 'Платформер', desc: 'Прыгай по платформам до финиша', icon: 'tpl-platformer', color: '#5a8c3e', genre: 'platformer', build: snap(platformer), }, { id: 'shooter', title: 'Шутер', desc: 'Уничтожь все мишени кликом', icon: 'tpl-shooter', color: '#a83232', genre: 'shooter', build: snap(shooter), }, { id: 'racing', title: 'Гонки', desc: 'Пройди трек с чек-поинтами на время', icon: 'tpl-racing', color: '#d97a3a', genre: 'racing', build: snap(racing), }, // === Ландшафтные (готовый гладкий мир) === { id: 'plain', title: 'Равнина', desc: 'Холмистый луг с цветами и деревьями', icon: 'tpl-plain', color: '#5a8c3e', genre: 'sandbox', build: snap(plain), }, { id: 'hills', title: 'Холмы', desc: 'Высокие горы со снежными вершинами', icon: 'tpl-hills', color: '#7a8b7a', genre: 'adventure', build: snap(hills), }, { id: 'island', title: 'Острова', desc: 'Архипелаг с пляжами и пальмами', icon: 'tpl-island', color: '#3a8bd9', genre: 'adventure', build: snap(island), }, { id: 'city', title: 'Город', desc: 'Городские кварталы с домами', icon: 'tpl-city', color: '#5a6478', genre: 'sandbox', build: snap(city), }, { id: 'village', title: 'Деревня', desc: 'Деревенька с домиками на поляне', icon: 'tpl-village', color: '#a8743f', genre: 'rpg', build: snap(village), }, ];