Skip to content

Road Map #2

@TheDoctorTimeLord

Description

@TheDoctorTimeLord

На текущий момент проект выходит из состояния "подготовка к разработки" на состояние "прототипирование".

Сейчас понятно, что вся игра должна делится условно на "сервер" (обработчик всей внутренней логики игры) и "клиент" (всё, что связано с 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 схемы (формочки, окна с параметрами, списки и т.д.)
      • Организовать иерархию объектов, составляющих формы и окна
      • Научиться делать обработку компонентов форм и окон
        • Вывод полей формы
        • Поддержка отдельных сущностей внутри формы (список перетаскиваемых объектов)
        • Шапка формы/окна
          • Перетаскивание всей формы/окна по экрану с помощью зажатия ЛКП по шапке
          • Кнопки действия с формой/окном (например, закрыть форму/окно)
        • Поддержка кастомных настроек содержимого формы
        • Поддержка кастомной обработки результата работы с формой
  • Расширение логики UI
    • Давать возможность валидирования (поддержания консистентности) компонентной модели UI, позволяя пересчитывать некоторые данный в момент их изменения
    • Давать возможность некоторую логику игры производить в UI части

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions