Descrição da arquitetura
Estou criando (projetando) um sistema de entidades e tive muitos problemas. Estou tentando mantê-lo orientado a dados e eficiente, tanto quanto possível. Meus componentes são estruturas de POD (matriz de bytes para ser mais preciso) alocadas em conjuntos homogêneos. Cada pool possui um ComponentDescriptor - ele contém apenas o nome do componente, os tipos e os nomes dos campos.
A entidade é apenas um ponteiro para a matriz de componentes (onde o endereço atua como um ID da entidade). EntityPrototype contém o nome da entidade e a matriz dos nomes dos componentes. Finalmente, subsistema (sistema ou processador) que funciona em conjuntos de componentes.
Problema real
O problema é que alguns componentes dependem de outros (Model, Sprite, PhysicalBody, Animation depende do componente Transform), o que cria muitos problemas quando se trata de processá-los.
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
Não há como processá-los usando índices. Passo 3 dias trabalhando nisso e ainda não tenho nenhuma idéia. Em projetos anteriores, o TransformComponent estava vinculado à entidade - mas não era uma boa ideia. Você pode me dar alguns conselhos sobre como processá-los? Ou talvez eu deva mudar o design geral? Talvez eu deva criar pools de entidades (pools de pools de componentes) - mas acho que será um pesadelo para caches de CPU.
obrigado