171 lines
7.6 KiB
Markdown
171 lines
7.6 KiB
Markdown
# Студия Рублокса
|
||
|
||
Open-source веб-студия для создания игр Рублокса — платформы 3D-игр в стиле Roblox.
|
||
|
||
Построена на **Babylon.js 7** + **React 18** + **Vite 5** + **Monaco Editor**. Делай вокселные карты, ставь модели, пиши скрипты на JS в Web Worker-песочнице. Опубликованные игры открываются в [Плеере Рублокса](https://git.rublox.pro/rublox/player) (отдельный репозиторий).
|
||
|
||
[](./LICENSE)
|
||
[](./LICENSE-COMMERCIAL.md)
|
||
|
||
---
|
||
|
||
## Быстрый старт (5 минут)
|
||
|
||
**Требования:**
|
||
- Node.js 18+ и npm 10+
|
||
- Браузер с WebGL2 (Chrome 90+ / Firefox 90+ / Safari 15+)
|
||
- 8 ГБ свободной памяти (студия тяжелее плеера — Monaco + большой ландшафт)
|
||
|
||
**Установка:**
|
||
```bash
|
||
git clone ssh://git@git.rublox.pro:2222/rublox/studio.git
|
||
cd studio
|
||
npm install
|
||
cp .env.example .env # дефолты указывают на публичный staging — работает сразу
|
||
npm run dev
|
||
```
|
||
|
||
Открой `http://localhost:5174/edit/<gameId>` — например `http://localhost:5174/edit/265`.
|
||
|
||
**Без JWT** ты увидишь экран авторизации. Чтобы обойти:
|
||
```js
|
||
// В DevTools браузера:
|
||
localStorage.setItem('Authorization', '<твой-jwt-с-rublox.pro>');
|
||
location.reload();
|
||
```
|
||
|
||
---
|
||
|
||
## Ассеты (GLB-модели / текстуры / звуки)
|
||
|
||
Папка `public/kubikon-assets/` (~93 МБ) **не хранится в git** чтобы репозиторий был лёгким. Скачать отдельно:
|
||
|
||
```bash
|
||
curl -L -o assets.zip https://git.rublox.pro/rublox/studio/releases/download/latest/kubikon-assets.zip
|
||
unzip assets.zip -d public/
|
||
```
|
||
|
||
Без ассетов студия запустится, но ландшафт будет пустой (нет текстур блоков).
|
||
|
||
---
|
||
|
||
## Standalone-режим (без бэкенда)
|
||
|
||
Хочешь попробовать без авторизации?
|
||
|
||
```bash
|
||
echo "VITE_STANDALONE=true" >> .env
|
||
npm run dev
|
||
```
|
||
|
||
Открой `http://localhost:5174/edit/sample` — пустой редактор, авторизация-мок, save отключён.
|
||
|
||
---
|
||
|
||
## Структура проекта
|
||
|
||
```
|
||
src/
|
||
├── editor/ # Главный редактор (KubikonEditor) ~37к строк
|
||
│ ├── engine/ # Babylon-движок — 66 файлов, ~28к строк
|
||
│ │ # BabylonScene, GameRuntime, MultiplayerSync,
|
||
│ │ # PlayerController, BlockManager, TerrainVoxelBuilder,
|
||
│ │ # ModelManager, DecoManager, ScriptSandbox,
|
||
│ │ # 30+ GD-гейммодов
|
||
│ └── *Panel.jsx, *Modal.jsx — UI редактора (Hierarchy/Inspector/Terrain/ScriptEditor)
|
||
├── preview-player/ # Встроенный мини-плеер для теста («Play»-кнопка в редакторе)
|
||
├── community/ # Витрина/лента: KubikonFeed, KubikonStudio, KubikonDocs,
|
||
│ # KubikonLearn, KubikonGamePage, KubikonHeroKit, RealtimeTest
|
||
├── gd-shop/ # Geometry Dash: GdMenu, GdShop, GdRules, GdCoverArt, GdPlayWrapper
|
||
├── admin-preview/ # Превью-каталоги для дизайнеров: GdSkins, GdBosses,
|
||
│ # GdSpikes, GdArches, GdFinishes, GdPortals, GdMusic,
|
||
│ # GdSfx, GdShipSkins, GdDeco
|
||
├── components/ # Общий UI: KubikonBugReport, KubikonLeaderboard,
|
||
│ # KubikonPerfOverlay, EmailConfirmNotice, PleeseReg,
|
||
│ # RublocsLogo
|
||
├── api/ # API.js (конфиг) + Kubikon3DService.js + KubikonCadService
|
||
│ # + SanctionsService + playTicket
|
||
├── auth/ # AuthContext, SanctionsContext (лёгкие версии,
|
||
│ # без UserService от минки)
|
||
├── hooks/ # useDeviceType
|
||
├── utils/ # kubikonTheme, kubikonTime
|
||
├── App.jsx # Router + Suspense (15+ роутов)
|
||
├── main.jsx
|
||
├── index.css
|
||
└── LoadingScreen.jsx
|
||
```
|
||
|
||
Подробнее об архитектуре — в [ARCHITECTURE.md](./ARCHITECTURE.md).
|
||
|
||
---
|
||
|
||
## Переменные окружения
|
||
|
||
Скопируй `.env.example` в `.env` и поправь:
|
||
|
||
| Переменная | Дефолт | Что означает |
|
||
|---|---|---|
|
||
| `VITE_API_BASE` | _(пустая)_ | Базовый URL HTTP-API. Пустой = vite-proxy (для dev). |
|
||
| `VITE_API_PROXY_TARGET` | `https://dev-api.rublox.pro` | (dev) куда vite-proxy шлёт `/api-*`. |
|
||
| `VITE_REALTIME_HTTP` | `https://dev-api.rublox.pro/api-game` | Colyseus HTTP. |
|
||
| `VITE_REALTIME_WS` | `wss://dev-api.rublox.pro/api-game` | Colyseus WS. |
|
||
| `VITE_RUBLOX_HOME` | `https://rublox.pro/app` | Редирект на главный сайт если нет авторизации. |
|
||
| `VITE_PLAYER_URL` | `https://player.rublox.pro` | URL плеера (для кнопки «Тест в плеере»). |
|
||
| `VITE_STANDALONE` | `false` | Пропустить API, открыть пустой редактор. |
|
||
|
||
---
|
||
|
||
## Команды
|
||
|
||
```bash
|
||
npm run dev # Dev-сервер (vite, порт 5174)
|
||
npm run build # Прод-билд → build/
|
||
npm run preview # Превью прод-билда локально
|
||
npm run lint # ESLint
|
||
npm run format # Prettier (записать)
|
||
npm run format:check # Prettier (проверить)
|
||
```
|
||
|
||
---
|
||
|
||
## Контрибьютинг
|
||
|
||
Мы рады PR'ам! Перед первым:
|
||
|
||
1. Прочитай [CONTRIBUTING.md](./CONTRIBUTING.md) — стиль, ветки, шаблон PR.
|
||
2. Подпиши [CLA](./CLA.md) (через `https://team.rublox.pro/developer/cla` или комментарий `/sign-cla`).
|
||
3. Открывай issues через шаблоны в `.gitea/ISSUE_TEMPLATE/`.
|
||
|
||
**Быстрый цикл:**
|
||
```bash
|
||
git checkout -b feature/моя-фича
|
||
# ...пишешь код...
|
||
npm run lint && npm run format
|
||
git commit -m "feat: описание"
|
||
git push origin feature/моя-фича
|
||
```
|
||
|
||
---
|
||
|
||
## Лицензия
|
||
|
||
Двойная лицензия:
|
||
|
||
- **[AGPL-3.0-or-later](./LICENSE)** — для open-source использования. Форки и производные работы (включая SaaS) обязаны публиковать свой исходник под той же лицензией.
|
||
- **[Коммерческая лицензия](./LICENSE-COMMERCIAL.md)** — для проприетарных продуктов. Контакт: `maksimivankov26@yandex.ru`.
|
||
|
||
Все контрибьюторы обязаны подписать [CLA](./CLA.md) перед первым merge.
|
||
|
||
© 2026 Иванкова Виктория Сергеевна (ИП). Все права защищены.
|
||
|
||
---
|
||
|
||
## Ссылки
|
||
|
||
- Главный сайт: https://rublox.pro
|
||
- Студия (демо): https://studio.rublox.pro
|
||
- Плеер (отдельный репо): https://git.rublox.pro/rublox/player
|
||
- Issues и PR: https://git.rublox.pro/rublox/studio
|
||
- Безопасность: [SECURITY.md](./SECURITY.md)
|
||
|