# Ближайший горизонт: что видит игрок Это не текущее состояние кода, а договорённости на ближайшее планирование. Как устроено сейчас — в [`architecture.md`](../../architecture.md). ## Решение: не PixiJS, а менеджер на DOM Внутри школы нет 2D-сцены, камеры и спрайтов. Интерфейс ближе к менеджеру, чем к классическому QSP: не «полотно текста + список действий», а панели. Ориентир по экрану школы (после часов и паузы, которые уже есть): - **Карта** — дерево локаций (tree view). - **Выбранная локация** — что происходит именно там. Отдельной панели общих событий нет: пока ленты событий не существует, постоянно пустая треть экрана только мешала, и место отдано вкладкам «Карта» и «Люди». Появится лента — вернётся и панель; решение принято в фазе 8, здесь оно записано. Картинок локаций и портретов в этом горизонте нет; позже можно добавить, не ломая панели. Анимация пока только переходы панелей/списков и живые цифры (часы, счётчики). Графики — когда появятся числа, которые ими стоит показывать, не раньше. Клиент остаётся plain DOM + CSS. WebGL-сцены нет. Симуляция по-прежнему на сервере: ученики и комнаты могут существовать как данные в Arch ECS, даже если клиент рисует строки списка, а не человечков. Типы комнат, предметов и действий описываются **defs** (JSONC), конкретная школа — **картой-инстансом**. Подробности: [`defs.md`](defs.md). Дерево в UI — территория (ещё и ходибелая локация) → здания → этажи → помещения. ## Первый срез (закрыто) Это и реализуем. Нового геймплея сверх этого не закладываем. **Экран школы.** Часы, пауза, скорость. Две панели: - дерево карты (позже к нему вкладкой встанут «Люди»); - выбранная локация (комната, этаж, корпус **или двор**): имя, предметы, персонажи (пусто), действия на месте (пусто), должности. Секции те же; где данных нет — пустое состояние. Клик по дереву — **фильтр на клиенте**. Сервер один раз отдаёт снимок. Язык подписей модов: `?lang=` на HTTP-каталоге (диалог создания) и то же значение в **Hello** на сокете (снимок при открытии). Не `Accept-Language`: его легко разъехать с переключателем RU/EN. **Create.** Моды (`core` заблокирован) → каталог → редактор карты или стереть дефолт → имя, дата → школа на диске и в своём потоке. **Не в этом срезе:** исполнение действий, живые персонажи, записи в ленте событий, смена модов у живой школы, Pixi, DLL-моды. ## Что уже зафиксировано | Тема | Решение | | --- | --- | | Вид внутри школы | Менеджер: дерево (вкладкой с «Людьми») + содержимое локации | | Рендер | DOM, не WebGL/Pixi | | Картинки | Нет в этом горизонте | | Анимация | Переходы и живые цифры | | Часы, пауза, скорость | Остаются; это не отменяется панелями | | Логика игры | Только сервер; клиент шлёт намерения и рисует то, что сказали | | Данные игры | Defs (типы) + карта (инстанс), см. [`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).