Implement tiled multiplayer city simulation and scaling stages
This commit is contained in:
1 parent
3d4b29fedf
commit
3b1fcd996a
53 files changed
+7354
-13
No files matched your search
@@ -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`)
|
||||
|
||||
Заложено под будущую симуляцию:
|
||||
Статические данные уже используются сервером; для дальнейшего игрового слоя предусмотрены:
|
||||
|
||||
| Что | Зачем потом |
|
||||
|---|---|
|
||||
|
||||
Reference in new issue
Block a user