Update design documentation to clarify the structure and relationships of game elements. Enhance the definitions of TerritoryDef, BuildingDef, and FloorDef, and introduce new concepts like Patch for modifying definitions. Revise the near-term design to outline the UI structure and interactions, ensuring a clear framework for future development phases.
ci / server (push) Failing after 3m37s
ci / client (push) Successful in 16s

This commit is contained in:
Leonid Pershin
2026-08-18 13:41:35 +03:00
parent d96b420133
commit bc9a33e67f
9 changed files with 337 additions and 105 deletions
+33 -15
View File
@@ -25,7 +25,26 @@ QSP: не «полотно текста + список действий», а п
даже если клиент рисует строки списка, а не человечков.
Типы комнат, предметов и действий описываются **defs** (JSONC), конкретная школа — **картой-инстансом**.
Подробности: [`defs.md`](defs.md). Дерево в UI — это территория → здания → этажи → помещения.
Подробности: [`defs.md`](defs.md). Дерево в UI — территория (ещё и ходибелая локация) → здания → этажи → помещения.
## Первый срез (закрыто)
Это и реализуем. Нового геймплея сверх этого не закладываем.
**Экран школы.** Часы, пауза, скорость. Три панели:
- дерево карты;
- общие события — **пусто** (заголовок и пустое состояние);
- выбранная локация (комната, этаж, корпус **или двор**): имя, предметы, персонажи (пусто),
действия на месте (пусто), должности. Секции те же; где данных нет — пустое состояние.
Клик по дереву — **фильтр на клиенте**. Сервер один раз отдаёт снимок. Язык подписей модов:
`?lang=` на HTTP-каталоге (диалог создания) и то же значение в **Hello** на сокете (снимок при
открытии). Не `Accept-Language`: его легко разъехать с переключателем RU/EN.
**Create.** Моды (`core` заблокирован) → каталог → редактор карты или стереть дефолт → имя, дата → школа на диске и в своём потоке.
**Не в этом срезе:** исполнение действий, живые персонажи, записи в ленте событий, смена модов у живой школы, Pixi, DLL-моды.
## Что уже зафиксировано
@@ -38,23 +57,22 @@ QSP: не «полотно текста + список действий», а п
| Часы, пауза, скорость | Остаются; это не отменяется панелями |
| Логика игры | Только сервер; клиент шлёт намерения и рисует то, что сказали |
| Данные игры | Defs (типы) + карта (инстанс), см. [`defs.md`](defs.md) |
| Дерево карты | Территория → здание → этаж → помещение; рёбра проходов — граф инстанса |
| Дерево карты | Территория (= двор, узел графа) → здание → этаж → помещение |
| Редактор карты | Только при создании школы |
| Моды | Папки на сервере, выбор в диалоге создания |
| Поток школы | Цель: один поток и один ECS world на школу, см. [`runtime.md`](runtime.md) |
## Ещё не решено
Эти вопросы закрывают игровой срез. Карту и моды больше не блокируют.
1. Что такое «общее событие»: лог за смену, только текущие процессы, или новости («урок начался»)?
2. Что видно на выбранной локации сначала: предметы (в т.ч. пусто), заготовки действий, вакансии?
3. Выбор узла в дереве — только фильтр на клиенте или намерение на сервер?
Открытые вопросы по core-моду, двору и коллизиям имён — в конце [`defs.md`](defs.md).
| Моды | `core` всегда; остальные — выбор при создании; поздний мод побеждает при споре имён |
| Поток школы | Основа среза: один поток и один ECS world на школу, см. [`runtime.md`](runtime.md) |
| Сохранения | На диск; часы не писать на каждом тике |
| События | Панель есть, лента пустая |
| Локация | Одни секции для двора, корпуса, этажа и комнаты |
| Двор | TerritoryDef, узел графа и корень дерева |
| Язык модов | HTTP `?lang=`, то же в Hello; не Accept-Language |
| Проекты | Каталог не в Server и не в Simulation, см. [`projects.md`](projects.md) |
| Выбор в дереве | Клиентский фильтр |
| Этаж | FloorDef (тонкий тип); узел карты ссылается на def |
## Заведомо не сейчас
- Портреты, арт локаций, схема этажа в пикселях.
- Управление персонажем от первого/третьего лица.
- Победа/кампания, пока нет даже наблюдаемого мира.
- Победа/кампания, живые персонажи, исполнение «сесть», записи событий.
- Смена модов у живой школы, код модов (DLL).