Component types - RamilGauss/MMO-Framework GitHub Wiki

Общий вид сущности в ECS

Компоненты для одного модуля всегда идут атомарной порцией. Можно использовать в одном Entity компоненты из разных модулей. Но если использовать несколько групп компонентов из одного и того же модуля, то может возникнуть неоднозначность к какой группе относится компонент.

image image image

Для тактики нужно ответить на вопрос: кто/какие операции делает и где/как на это реагировать.

Meta component

Компонент, который используется "по капотом" движком. Используются для помощи при инстанцировании сцены или префаба и т.д.
Например: TGuidComponent, TNameComponent, TParentGuidComponent.
Тактика:
Кто добавляет, меняет и удаляет: в логике через функции ядра.
Кто и как реагирует: Add: Инстанцирование сцены или префаба.
Update: Редактирование сцены, префаба.
Remove: Выгрузка сцены, префаба. Точечное удаление Entity при редактировании.

As part of a module

Компоненты для одного модуля всегда идут атомарной порцией. По сути набор компонентов отражает объекты модуля. Например: для кнопки требуются все компоненты, которые отражают свойства Относящийся только к одному из модулей.
Тактика:
Add: применяется в Begin до Work модуля.
Update: если меняется в модуле, скидывается в End в ECS. При изменении в логике применяется в Begin до Work модуля.
Remove: удаляется только в логике. Мнговенно реакция в логике соответсвующего модуля.

Shared component

Разделяемый между двух и более модулей компонент.
TTransformComponent - между звуком, графикой и физикой.
TParentGuidComponent - разделение между всеми модулями и даже ядром. Меняется только логикой через функции ядра.
Тактика: В каждом из модулей есть логика по обработке изменений. Add:
Update:
Remove:

Shared data component

Разделяются данные между модулями.
TMeshComponent -
TTextureFromFileComponent - здесь разделение данных текстуры по указателю.
Тактика:
Add:
Update:
Remove: