Открытый кроссплатформенный 2D и 3D игровой движок
  • Дата создания
    8 ноября 2024
  • Топиков
    2
  • Ограничение на постинг
    0.000
  • Категория:
    Разработка игр

CyberGrad 2033 Архитектура: Ecs

Предыдущий пост: CyberGrad 2033

Сразу оговорюсь, данная реализация лишь внешне выглядит как Ecs, под капотом это скорее всего что-то совершенно другое, т.к я не в курсе как выглядят настоящие Ecs
Так же тут нет никакой претензии на производительность, главными приоритетами были удобство, простота и нативная интеграция с движком.

Основные сущности, на которых все держиться: Энтити, компоненты, системы и сервисы.

Entity
Это класс, наследник Node, в нем я реализовал методы добавления/удаления компонентов.
На старте энтити пробегается по своим чилдам и если они являются компонентами, добавляет в словарь.

Components
Это тоже наследник Node, потому что я хочу иметь возможность добавлять компоненты через редактор
Компоненты не содержат логики (хотя никто не запретит), толко данные и могут содержать ссылки на другие ноды

Systems
Тут происходит вся логика с энтитями, но только с теми, которые попадают под фильтр этой системы.
У систем есть несколько коллбэков, которые имплементируются интерфесами
IInitSystem — вызовется один раз при старте игры
IDestroySystem — вызовется один раз при завершении
IEntitiesAdded — вызывается когда появляется новый энтити, подходящий под фильтр системы (только один раз)
IEntitiesUpdate — вызывается каждый кадр и содержит всех энтитей подходящих под фильтр
IEntitiesPhysicsUpdate — то же самое но каждый апдейт физики
IComponentsRemoved — вызывается когда энтити больше не подходит под фильтр

Services
Немного походяд на системы, но если система работает с энтитями, то сервисы это просто утилитарные классы, которые могут делать что угодно. К примеру AudioService — который воспроизводит звуки в игре.
Сервисы умеют в следующие интерфейсы:
IInit — на старте игры один раз
IUpdate — каждый кадр
Читать дальше

CyberGrad 2033

Начал пилить игру перед самым новым годом, буду выкладывать тут прогресс (а может и не буду)


Жанр: Топдаун шутер
Сеттинг: Ближайшее грустное будущее в мухосранске провинциальном городке
Сюжет: ЧатГПТ 6 захватил склад Амазон и теперь клепает из бытовых товаров истребителей кожанных мешков. Робот пылесос с ножом на изоленте — один из простых врагов.
Главный герой — отважный курьер, который должен доставлять заказы в этом опасном городе.

Специально для этого проекта запилил ECS, FSM и Dependency Injection
Очень нравится как получилось сделать архитектуру, может быть потом распишу

Видос