Описание архитектуры
Я создаю (проектирую) систему сущностей и столкнулся со многими проблемами. Я стараюсь максимально эффективно ориентировать их на данные и эффективность. Мои компоненты - это структуры POD (точнее, массив байтов), размещенные в однородных пулах. У каждого пула есть ComponentDescriptor - он просто содержит имя компонента, типы полей и имена полей.
Entity - это просто указатель на массив компонентов (где адрес действует как идентификатор объекта). EntityPrototype содержит имя сущности и массив имен компонентов. Наконец, подсистема (система или процессор), которая работает с пулами компонентов.
Актуальная проблема
Проблема заключается в том, что некоторые компоненты зависят от других (Model, Sprite, PhysicalBody, Animation зависит от компонента Transform), что создает много проблем при их обработке.
For example, lets define some entities using [S]prite, [P]hysicalBody and [H]ealth:
Tank: Transform, Sprite, PhysicalBody
BgTree: Transform, Sprite
House: Transform, Sprite, Health
and create 4 Tanks, 5 BgTrees and 2 Houses and my pools will look like:
TTTTTTTTTTT // Transform pool
SSSSSSSSSSS // Sprite pool
PPPP // PhysicalBody pool
HH // Health component
Нет способа обработать их, используя индексы. Я провожу 3 дня, работая над этим, и у меня все еще нет никаких идей. В предыдущих проектах TransformComponent был привязан к сущности, но это не было хорошей идеей. Можете ли вы дать мне несколько советов, как их обрабатывать? Или, может быть, я должен изменить общий дизайн? Возможно, мне следует создать пулы энтитов (пулы компонентных пулов) - но я думаю, что это будет кошмар для кешей процессоров.
Спасибо