Не так давно наткнулся на такой подход программирования в играх как ECS (Entity Component System). Далее начал читать статьи и смотреть различные ролики по этой теме. Из названия понятно что это разделение на сущности, компоненты и системы. Но почему он становится более предпочтительным в разработке игр нежели всем…
Тема
23 163
30
KaneThaumaturge, как я понял, идея в том чтоб убрать автоматику из жтого вашего ООП и вручную более оптимально ложить структурированные данные в память.
20
Разве это не то как реализовано ООП в vJass? Там как раз instance структуры это всего лишь индентификатор к массивам.

Я вот не совсем представляю ECS для использования с БД, получается каждое обращение к компоненту сущности это новый запрос в БД? Ну мб я че-то не понял. Мало инфы как-то, ссылки я видел, но пост будто бы ни о чем. Перенос бы уже информацию сюда и структурировал.
38
nazarpunk, а зачем тебе дерево, прямая линковка это несортированный список. Удаление = перемещение последнего элемента на место удаленного. Сортировки и деревья идут уже с индексами этого списка как пристройки
38
nazarpunk, модуль коллизий хранит массив всех текущих столкновений - это 2 индекса мешей/примитивов, нормалей и глубины проникновения
Из меша узнаем, чей это меш, после чего идем в любой компонент этого объекта
16
nazarpunk, ниже по тексту написал. То что объекты и его иерархия никак не подразумевает хранение плотно в памяти, потому что куча ссылок и наследований других полей. В DOD подходе мы реализуем данные так чтобы они хранились плотно в массивах и обход по ним происходит быстрее, за счёт попадания в кэш процессора и повторного переиспользования без необходимости заново загружать в память процессора, какого блока памяти.
16
nazarpunk, зависит от реализации, например, это на прямую хранить в мапе по id сущности массив его компонентов, компоненты можно добавлять и удалять. Ты наверное не понял, у каждой сущности свой инстанс этих компонентов.
30
позиция и хп это компоненты
Каким образом они слинкованы? Если при получении достаточного урона юнит умер, то его вектор не передастся следующему юниту. Как это делается?
30
Угадай в каком решении быстрее сделать обходы и умножения векторов много раз в секунду
А насколько у нас тесные связи? Вот допустим у нас есть система аур. Одна аура распространяет пониженную гравитацию в сфере. Другая распространяет вектор гравитации к своему центру. Третья убирает коллизии на своём радиусе. Как нам поможет ECS?
Ну или вообще по классике. Есть у нас дерево. Как удалить родителя не оставив висячих ссылок в пустоте? В ООП это разрулится деструкторами. А в ECS?
16
nazarpunk, позиция и хп это компоненты, данные которые ты добавляешь в сущности, а сущность это просто ссылка (id) на какой-то набор этих компонентов. Тут отношение один ко многим.