studio/src/community/templates.js
МИН 31adbf151b Initial public release: Студия Рублокса v1.0
Open-source веб-студия для создания игр Рублокса, двойная лицензия
AGPL-3.0 + Коммерческая.

Главное:
- Vite 5 + React 18 + Babylon 7.54.3 + Monaco Editor + Colyseus 0.16
- Самодостаточный движок ~28к строк (66 файлов): BlockManager,
  TerrainVoxelBuilder, ModelManager, DecoManager, PlayerController,
  ScriptSandboxWorker, MultiplayerSync, 30+ GD-гейммодов
- Главный редактор KubikonEditor (~37к строк) + панели, ScriptEditor (Monaco)
- Витрина игр (KubikonFeed, KubikonStudio, KubikonDocs, KubikonLearn)
- Geometry Dash sub-app (GdMenu, GdShop, GdRules, GdCoverArt)
- 10 admin-preview каталогов для дизайнеров (скины, музыка, порталы и т.д.)
- Конфигурируемый бэкенд через VITE_API_BASE — работает со staging
  (dev-api.rublox.pro) без настройки
- Standalone-режим (VITE_STANDALONE=true) — открыть пустой редактор без бэка
- Полная документация (на русском): README, ARCHITECTURE, CONTRIBUTING,
  SECURITY, CHANGELOG
- ESLint + Prettier + EditorConfig
- Legal: LICENSE (AGPL-3.0), LICENSE-COMMERCIAL.md, CLA.md, COPYRIGHT.md
- Issue templates: bug_report, feature_request, security_disclosure

Перед публикацией:
- Все импорты из minecraftia заменены на локальные
- Все хардкоды URL (minecraftia-school.ru) и внутренних IP убраны → env
- Admin-эндпоинты Kubikon3DService вырезаны (остаются в приватном репо)
- AdminKubikonModeration не публикуется (модерация — в team.rublox.pro)
- 93 МБ ассетов public/kubikon-assets вынесены в .gitignore
  (раздаются через release artifact)
2026-05-27 23:41:10 +03:00

114 lines
4.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* templates.js — шаблоны игр для KubikonStudio.
*
* Каждый шаблон — это готовый снимок project_data, СГЕНЕРИРОВАННЫЙ
* самим движком: настоящий гладкий ландшафт (RobloxTerrain / Surface
* Nets + биомы + деревья/трава/цветы), а для геймплейных — плюс
* примитивы и скрипты.
*
* JSON-снимки лежат в ./template-data/<id>.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),
},
];