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.
This commit is contained in:
@@ -0,0 +1,53 @@
|
||||
# Нарезка проектов (целевая)
|
||||
|
||||
Сейчас в коде: `Protocol ← Server → Simulation`. Этого мало, когда появятся defs, карта и моды.
|
||||
Класть каталог в Simulation (рядом с Arch) или в Server (рядом с Kestrel) — оба варианта смешают
|
||||
слои. Ниже — куда что идёт в этом срезе. `architecture.md` правится, когда код так и станет.
|
||||
|
||||
## Зависимости
|
||||
|
||||
```
|
||||
Protocol — ни на кого из игровых проектов (только байты)
|
||||
Content — ни на Protocol, ни на Simulation, ни на ASP.NET
|
||||
Simulation → Content (каталог и раскладка, без файловых путей хоста)
|
||||
Server → Protocol, Simulation, Content
|
||||
Client — своя сторона Protocol (TS) + HTTP
|
||||
```
|
||||
|
||||
Клиент по-прежнему не ссылается на C#-проекты.
|
||||
|
||||
## Кто чем владеет
|
||||
|
||||
| Проект | Да | Нет |
|
||||
| --- | --- | --- |
|
||||
| **HSchool.Content** (новый) | Типы def, JSONC-загрузчик, наследование, патчи, слияние локалей, граф карты, валидация связности | Arch, часы, HTTP, потоки, пути `mods/` с диска хоста |
|
||||
| **HSchool.Simulation** | `School`, `GameClock`, Arch `World`, тик, применение раскладки к миру | Kestrel, сокеты, `Directory.Enumerate`, сейв-файлы |
|
||||
| **HSchool.Server** | Хост, супервизор, работник-поток, `mods/` и `saves/` из конфига, HTTP/WS, DTO запросов | Правила «комната должна быть связана», схема Chair |
|
||||
| **HSchool.Protocol** | Кадры сокета, в том числе снимок карты и locale в Hello | Имена комнат, JSONC |
|
||||
| **HSchool.Client** | DOM, `t()` для хрома, рисует снимок | Файлы модов, симуляция |
|
||||
|
||||
Content принимает уже открытые потоки или список документов (сервер прочитал папки и отдал
|
||||
байты/пути через узкий порт вроде «вот корневые каталоги этих id»). Тогда тесты Content кормят
|
||||
фикстурами из `tests/`, без `appsettings`.
|
||||
|
||||
Сейв: **форма** (часы + id модов + раскладка) собирается из типов Simulation/Content; **запись
|
||||
файла** — Server, и только с потока работника.
|
||||
|
||||
## Зачем не сваливать в Simulation
|
||||
|
||||
Arch и фиксированный тик — про живую школу. Парсер JSONC, `defName` и проверка графа не знают,
|
||||
что такое tick. Их гоняют сотни раз в юните без мира. Если загрузчик сидит в Simulation, любой
|
||||
тест каталога тащит ECS и наоборот.
|
||||
|
||||
## Зачем не сваливать в Server
|
||||
|
||||
Иначе связность карты и last-wins нельзя проверить без Aspire. Хост должен быть тонким:
|
||||
найти папки, сериализовать HTTP, крутить потоки.
|
||||
|
||||
## Тесты
|
||||
|
||||
- `tests/HSchool.Content.Tests` — фикстуры JSONC, коллизии имён, дырявый граф, двор обязателен.
|
||||
- `HSchool.Simulation.Tests` — часы, тик, «школа с таким каталогом живёт».
|
||||
- `HSchool.AppHost.Tests` — create с картой, рестарт, сейв на диске.
|
||||
|
||||
Ориентир в `AGENTS.md` обновить в фазе, которая заводит проект (сейчас это фаза 3).
|
||||
Reference in New Issue
Block a user