Всем привет в данной части мы будем разрабатывать архитектуру нашего игрового движка.
Некоторые щас могут сказать: "Зачем делать какую то архитектуру? Почему бы сразу не начать писать код?". Я им отвечу так, когда начинает накапливаться тонна кода, то начинаешь видеть все недостатки, но всегда есть но, ты их попросту не можешь исправить. Так что давайте позаботимся о архитектуре заранее, чтобы потом при разработке не плакать в подушку.
Начнем с того, а какой паттерн будет использовать наша архитектура?
Архитектура нашего движка будет использовать MVC ( Model View Controller) паттерн. Который говорит что архитектура приложения должна быть разделена на 3 модуля. Модель, представление, и контроллер.
Также нужно определится какая компонентная система будет использоваться в нашем движке. Наш игровой движок будет использовать Аспектную систему. Данная система примечательна тем, что она не имеет такого понятия как GameObject, потому компонент в данной системе полностью отдельная сущность.
Модель будет содержать классы нашего движка.
Представление будет тоже содержать классы но, они будут для рисования чего ни будь.
Контроллер уже будет всем этим управлять.
Теперь давайте поподробнее.
Наш главный класс будет содержать в себе классы GameLoop, World, Camera, Render, Physics, Input, ConfigGame, ConfigEngine, ErrorGame.
GameLoop будет контролером, также хранить интерфейсы данных классов. Свой интерфейс к каждому из этих классов. И GameLoop будет иметь главный цикл приложения в себе, и данный цикл будет метод обновления.
World будет хранить в себе аспекты, и будет интерфейсом для работы с юзером.
Camera как не трудно догадаться это будет камерой.
Render будет представлением, а также отвечать за отрисовку на экране.
Physics как не трудно догадаться будет обрабатывать физику, и предоставлять методы для работы с физикой.
Input будет представлять интерфейс для работы с вводом и выводом.
ConfigGame будет хранить в себе настройки игры, а также загружать их из файла.
ConfigEngine будет хранить настройки движка, и также загружать их из файла.
ErrorGame будет выводить на консоль ошибки.
В следующей части мы напишем базовую часть GameLoop, World, и Render.