Add city gameplay, snapshot migrations, administration and Compose operations
This commit is contained in:
1 parent
3b1fcd996a
commit
85df37c26e
24 files changed
+1042
-55
No files matched your search
+19
-14
@@ -4,7 +4,7 @@
|
||||
|
||||
## 1. Цель и рамки
|
||||
|
||||
Игра: симулятор бога в духе RimWorld, но с меньшим влиянием игрока. Город живёт сам (жители, машины, потребности, события), игроки в основном наблюдают и ограниченно вмешиваются (вмешательство в первую версию не входит).
|
||||
Игра: симулятор бога в духе RimWorld, но с меньшим влиянием игрока. Город живёт сам (жители, машины, потребности, события), игроки в основном наблюдают и ограниченно вмешиваются. По запросу автора от 2026-10-30 этап 5 включает базовые команды вмешательства.
|
||||
|
||||
Исходные требования:
|
||||
|
||||
@@ -14,7 +14,7 @@
|
||||
- Клиент остаётся в браузере и только отображает. Вся симуляция и правила на сервере.
|
||||
- Сгенерированный город хранится готовым, генерация не выполняется в рантайме комнаты.
|
||||
|
||||
Не входит в первую версию: влияние игроков на мир, аккаунты и монетизация, предсказание на клиенте (в наблюдательной игре оно не нужно).
|
||||
Не входит в первую версию: аккаунты и монетизация, предсказание на клиенте (в наблюдательной игре оно не нужно). Влияние ограничено командами этапа 5.
|
||||
|
||||
## 2. Ключевые решения
|
||||
|
||||
@@ -172,20 +172,22 @@
|
||||
- [x] Оптимизация протокола и рендера.
|
||||
Бинарные дельты, квантизация, объединение пропущенных обновлений под бюджетом трафика, ограничение видимых сущностей и кэш тайлов; динамика пока на Canvas.
|
||||
|
||||
**Этап 5. Игровой слой (дальше)**
|
||||
- [ ] Потребности, события, экономика.
|
||||
- [ ] Ограниченное влияние игроков (команды, права, очереди, лимиты).
|
||||
- [ ] Сохранения, восстановление комнат, админка.
|
||||
Сохранения и восстановление уже работают; админка, миграции схем и квоты диска остаются следующей частью этапа.
|
||||
**Этап 5. Базовый игровой слой**
|
||||
- [x] Потребности, события, экономика.
|
||||
Усреднённые голод, усталость и настроение населения; сон, питание, производство еды и доход казны. События урожая, болезни и дождя воспроизводятся из seed и игрового времени. Индивидуальный ИИ жителей пока остаётся расписанием дом–работа.
|
||||
- [x] Ограниченное влияние игроков (команды, права, очереди, лимиты).
|
||||
Покупка запасов, общий обед и отдых; одинаковые права подключённых игроков, цена из общей казны, ограниченная очередь, общий часовой игровой интервал и интервал сессии. Пауза/скорость остаются голосованием.
|
||||
- [x] Сохранения, восстановление комнат, админка.
|
||||
Схема v2 сохраняет игровой слой и очередь, v1 мигрируется при открытии. Добавлены общая квота снимков, защита прежних файлов при переполнении и админский интерфейс/API с отдельным токеном оператора.
|
||||
|
||||
**Этап 6. Эксплуатация**
|
||||
- [ ] Деплой, мониторинг (метрики тика, число сущностей, трафик), логи.
|
||||
Метрики, логи и Dockerfile подготовлены. Docker Engine в текущей среде не запущен; внешний сервер для деплоя не задан.
|
||||
- [x] Подготовка Compose, мониторинг (метрики тика, число сущностей, трафик), логи.
|
||||
По уточнению автора этап 6 ограничен подготовкой Compose. Добавлены постоянные тома, healthcheck, лимиты, SIGTERM с сохранением, ротация логов и опциональный Prometheus с правилами предупреждений. Проверка `docker compose --profile monitoring config --quiet` проходит. Docker Engine выключен: сборка и запуск контейнера не проверены.
|
||||
- [x] Создание комнат по запросу (выбор города), лимиты ресурсов.
|
||||
|
||||
Проверка минимальной сцены: `npm run demo`, `npm run build`, `npm run server:dev`, затем `http://localhost:3000/?play`.
|
||||
Имя репозитория остаётся `citygen`; генератор и существующий рендер сохраняют свои пути в `src/`, новые сетевые модули находятся в `client/`.
|
||||
Состояние и ограничения реализации описаны в `server/README.md`. Этапы 5–6 не объявляются завершёнными готовностью сетевого прототипа.
|
||||
Состояние и ограничения реализации описаны в `server/README.md`, запуск Compose — в `deploy/README.md`. Этап 5 реализует базовую городскую модель, этап 6 — подготовку Compose в согласованном объёме.
|
||||
|
||||
## 10. Риски
|
||||
|
||||
@@ -269,7 +271,10 @@
|
||||
- Реальная нагрузка, 2026-10-30: Бальцерс, 1 000 000 жителей, 30 WebSocket-клиентов, 20 с, фоновые сохранения каждые 2 с. Выборка длительности тиков через метрики: p95 36,5 мс; максимум всех тиков по счётчику комнаты 44,7 мс. Средний трафик 4,8 КБ/с на клиента, максимальный 44,7 КБ/с. Ошибок, разрывов и срабатываний ограничения трафика не было. Это короткий локальный тест с небольшими AOI, а не гарантия для любого города, плотности, диска и целевого сервера. Пиковая память процесса со статикой и буферами — около 272 МиБ; память одной ECS отдельно не измерялась.
|
||||
- Браузер: повторный вход в сохранённую миллионную комнату до загруженной области — 1,31 с в локальном Chrome.
|
||||
|
||||
Детальные пути между этажами, использование мебели жителями, потребности,
|
||||
события, экономика и вмешательство игроков остаются игровым слоем этапа 5.
|
||||
Для эксплуатации также остаются миграции снимков, квоты диска, админка,
|
||||
проверка контейнера и развёртывание в выбранном окружении.
|
||||
- Этапы 5–6: 17 TS-тестов, 11 Rust unit-тестов и 2 интеграционных теста проходят. Проверены миграция v1→v2, сохранение очереди команды, детерминизм экономики/событий, влияние потребностей на производство, расход еды, квота без потери последнего снимка, отказ без админского токена и подтверждение записи через API.
|
||||
- Chrome: отображение казны/еды/потребностей, команда «Обед» со списанием ресурсов и снижением голода, пауза, этаж/масштаб, админское сохранение. Загрузка области — 1,12 с локально.
|
||||
|
||||
Дальнейшее развитие за пределами базового слоя: индивидуальные потребности и
|
||||
выбор целей, детальные переходы между этажами, использование мебели и
|
||||
уличных слотов жителями, транспорт. Подготовленный Compose ещё нужно собрать
|
||||
и запустить на Docker-хосте; внешнее развёртывание в текущий запрос не входит.
|
||||
Reference in new issue
Block a user