-
Notifications
You must be signed in to change notification settings - Fork 0
Description
На текущий момент проект выходит из состояния "подготовка к разработки" на состояние "прототипирование".
Сейчас понятно, что вся игра должна делится условно на "сервер" (обработчик всей внутренней логики игры) и "клиент" (всё, что связано с UI). Нужно это для лёгкости внедрения онлайн игры и предотвращения сильного связанния внутренней логики и её отображения. Для глобального проектирования игры используется паттерн MVVM, где Model - тот самый "сервер", View и ViewModel - сам клиент. При этом клиент внутри достаточно сильно связан, однако здесь View - всё что касается рендеринга внутреннего состояния клиента, а ViewModel - адаптер Model для View, а также дополнительная обработка логики клиента.
В проекте решено использовать ECS для организации данных UI. Также рассматривается его использование в модели игры.
Цель текущей стадии сделать прототип UI с помощью ECS и оценить, стоит ли дальше идти таким путём. В результате прототип должен уметь:
- Пользовательский ввод
- Обрабатывать ввод с клавиатуры
- Трекинг ввода с клавиатуры
- Биндинг клавиш ввода (например, возможность поменять кнопки для перемещения персонажа)
- Иерархическая обработка событий ввода
- Обрабатывать ввод с мыши
- Drag and drop
- Отслеживание действий мыши
- Обработка различных видов нажатых клавиш мыши
- Иметь возможность расширения на альтернативный ввод
- Контроллеры
- Обрабатывать ввод с клавиатуры
- Рендеринг
- Производить иерархический рендеринг (от самого дальнего к пользователю объекта к самому ближнему)
- Иметь возможность расширять способы отрисовки (подсистемы рендеринга)
- Поддерживать частичный рендеринг (не все объекты сразу, а только необходимые)
- Разнообразить способы отрисовки
- Анимация
- Возможность обработки скелетной анимации
- Возможность обработки классической анимации
- Частицы
- Произвольные полигоны
- Анимация
- Реагировать на изменения "модели" игры
- Слушать события модели и применять их в UI
- Уметь публиковать события в модель
- Общая архитектура
- Делить данные и системы на сцены для оптимизации работы #5
- Объекты на текущей сцене определяются специальном компонентом
- Возможность выгрузки сущностей, относящихся с конкретной сцене
- Делить систему по типу обработки:
- Последовательная обработка тактов цикла обновления UI
- Реакционная обработка на изменения в системе. Поддерживать лёгкость работы ECS при реакционной обработке
- Возможность загрузки UI из JSON файла
- Загрузка сущностей из JSON файла
- Проверка корректности JSON перед загрузкой
- Проверка валидирования Entity и Prototype
- Произвольная пользовательская валидация
- Поддержка дополняемых полей (например, сущность импортирует компоненты родителя и не переопределяет значение со списком, а дописывает свои данные в него).
- Поддержка сущностей-прототипов (как Archetype, только с данными).
- Создание отдельных entity по прототипам
- Создание дочерних сущностей
- Выделить итоговый список необходимых core систем
- Давать возможность пользователю библиотеки задавать список систем самостоятельно
- Давать возможность отключать или включать некоторые системы
- Поддержка классической UI схемы (формочки, окна с параметрами, списки и т.д.)
- Организовать иерархию объектов, составляющих формы и окна
- Научиться делать обработку компонентов форм и окон
- Вывод полей формы
- Поддержка отдельных сущностей внутри формы (список перетаскиваемых объектов)
- Шапка формы/окна
- Перетаскивание всей формы/окна по экрану с помощью зажатия ЛКП по шапке
- Кнопки действия с формой/окном (например, закрыть форму/окно)
- Поддержка кастомных настроек содержимого формы
- Поддержка кастомной обработки результата работы с формой
- Делить данные и системы на сцены для оптимизации работы #5
- Расширение логики UI
- Давать возможность валидирования (поддержания консистентности) компонентной модели UI, позволяя пересчитывать некоторые данный в момент их изменения
- Давать возможность некоторую логику игры производить в UI части