Descripción de la arquitectura
Estoy creando (diseñando) un sistema de entidad y me encontré con muchos problemas. Estoy tratando de mantenerlo orientado a los datos y lo más eficiente posible. Mis componentes son estructuras POD (matriz de bytes para ser precisos) asignados en grupos homogéneos. Cada grupo tiene un ComponentDescriptor: solo contiene el nombre del componente, los tipos de campo y los nombres de campo.
La entidad es solo un puntero a una matriz de componentes (donde la dirección actúa como una ID de entidad). EntityPrototype contiene el nombre de la entidad y la matriz de nombres de componentes. Finalmente Subsistema (Sistema o Procesador) que funciona en grupos de componentes.
Problema real
El problema es que algunos componentes dependen de otros (Modelo, Sprite, PhysicalBody, Animation depende del componente Transform), lo que genera muchos problemas a la hora de procesarlos.
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
No hay forma de procesarlos usando índices. Paso 3 días trabajando en ello y todavía no tengo ideas. En diseños anteriores, TransformComponent estaba vinculado a la entidad, pero no era una buena idea. ¿Me puede dar algunos consejos sobre cómo procesarlos? ¿O tal vez debería cambiar el diseño general? Tal vez debería crear grupos de entidades (grupos de grupos de componentes), pero supongo que será una pesadilla para los cachés de CPU.
Gracias