He estado interesado en el sistema de entidades basado en componentes por un tiempo, y leí innumerables artículos sobre él (los juegos Insomiac , el bastante estándar Evolve Your Hierarchy , T-Machine , Chronoclast ... solo por nombrar algunos).
Todos parecen tener una estructura en el exterior de algo como:
Entity e = Entity.Create();
e.AddComponent(RenderComponent, ...);
//do lots of stuff
e.GetComponent<PositionComponent>(...).SetPos(4, 5, 6);
Y si trae la idea de datos compartidos (este es el mejor diseño que he visto hasta ahora, en términos de no duplicar datos en todas partes)
e.GetProperty<string>("Name").Value = "blah";
Sí, esto es muy eficiente. Sin embargo, no es exactamente el más fácil de leer o escribir; se siente muy torpe y trabajando contra ti.
Personalmente me gustaría hacer algo como:
e.SetPosition(4, 5, 6);
e.Name = "Blah";
Aunque, por supuesto, la única forma de llegar a ese tipo de diseño es de vuelta en el tipo de jerarquía Entity-> NPC-> Enemy-> FlyingEnemy-> FlyingEnemyWithAHatOn que este diseño intenta evitar.
¿Alguien ha visto un diseño para este tipo de sistema de componentes que aún sea flexible, pero que mantenga un nivel de facilidad de uso? Y para el caso, ¿logra sortear el almacenamiento de datos (probablemente el problema más difícil) de una buena manera?
¿Qué diseños hay para un sistema de entidad basado en componentes que sea fácil de usar pero flexible?