Component types - RamilGauss/MMO-Framework GitHub Wiki
Общий вид сущности в ECS
Компоненты для одного модуля всегда идут атомарной порцией. Можно использовать в одном Entity компоненты из разных модулей. Но если использовать несколько групп компонентов из одного и того же модуля, то может возникнуть неоднозначность к какой группе относится компонент.
Для тактики нужно ответить на вопрос: кто/какие операции делает и где/как на это реагировать.
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: