Implement tiled multiplayer city simulation and scaling stages

This commit is contained in:
mrleo1nid committed 2026-10-30 22:06:56 +03:00
1 parent 3d4b29fedf
commit 3b1fcd996a
53 files changed
+7354 -13

No files matched your search

+40 -4
View File
@@ -1,11 +1,47 @@
# Город сверху — генератор карты по OpenStreetMap (MVP)
# Город сверху — генератор OSM и клиент-серверная симуляция
Добавлен серверный режим по [плану](docs/PLAN.md): подготовленные города,
комнаты до 30 наблюдателей, жители по расписанию, общий календарь и голосования,
сохранения и очередь генерации. Браузерный генератор ниже остаётся режимом отладки.
## Сетевая игра
Нужны Node.js 22+ и Rust stable (на Windows — установленный MSVC linker).
Запускать команды из корня репозитория:
```bash
npm ci
npm run demo # готовый город из локального образца OSM, без запросов к Overpass
npm run build
npm run server:dev # http://localhost:3000/?play
```
В списке выберите Бальцерс, задайте ник и создайте комнату. Другие игроки входят
в ту же комнату из списка. Кнопка «Создать город на сервере» открывает выбор
области и запускает отдельную задачу генерации с прогрессом.
Можно экспортировать уже готовый мир и открыть только статику без симуляции:
```bash
npm run export-city -- world.json public/cities/my-city
# http://localhost:3000/?city=/cities/my-city/manifest.json
```
Экспорты не перезаписываются: новая версия города получает новый каталог.
Настройки, API, ограничения LOD и описание сохранений находятся в
[server/README.md](server/README.md).
Проверки: `npm run typecheck`, `npm test`, `npm run server:test`,
`npm run server:load`. Изменение протокола: `npm run proto:generate`.
## Браузерный генератор для отладки
Выделяете на карте небольшой город или район → по данным OSM строится подробная карта
с видом строго сверху: дороги реальной ширины с тротуарами и разметкой, парковки
с машинами, деревья, и **у каждого здания — этажи, комнаты, двери, окна, лестницы
и мебель**, нарисованные простыми геометрическими фигурами, как на плане квартиры.
Всё работает в браузере, без сервера: данные берутся из Overpass API, генерация
В отладочном режиме всё работает в браузере: данные берутся из Overpass API, генерация
идёт в Web Worker'ах, готовый мир сохраняется в IndexedDB.
Машины появляются только на парковках и в гаражах; вдоль улиц они не генерируются.
@@ -45,7 +81,7 @@ npm run cli -- samples/balzers-2013.json 47.058 9.492 47.074 9.518 world.json
- справа — этаж для всей карты (⌂ — крыши), `PgUp`/`PgDn` или `[` `]`;
- клик по зданию — карточка: вид, этажность (из OSM или оценка), квартиры, спальные места,
свой переключатель этажей только для этого здания;
- «Экспорт мира» — весь мир одним файлом `.json.gz` (будущий формат для игры).
- «Экспорт мира» в отладочном режиме — весь мир одним файлом `.json.gz`; `export-city` преобразует его в серверный тайловый формат.
## Как устроена генерация
@@ -74,7 +110,7 @@ Overpass JSON ─► city.ts ──────────────► зо
## Модель данных мира (`src/types.ts`)
Заложено под будущую симуляцию:
Статические данные уже используются сервером; для дальнейшего игрового слоя предусмотрены:
| Что | Зачем потом |
|---|---|