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)
114 lines
4.2 KiB
JavaScript
114 lines
4.2 KiB
JavaScript
/**
|
||
* 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),
|
||
},
|
||
];
|