Sono stato interessato al sistema di entità basato su componenti per un po 'e ho letto innumerevoli articoli su di esso (I giochi Insomiac , il piuttosto standard Evolve Your Hierarchy , la T-Machine , Chronoclast ... solo per citarne alcuni).
Sembrano tutti avere una struttura all'esterno di qualcosa come:
Entity e = Entity.Create();
e.AddComponent(RenderComponent, ...);
//do lots of stuff
e.GetComponent<PositionComponent>(...).SetPos(4, 5, 6);
E se porti l'idea dei dati condivisi (questo è il miglior design che ho visto finora, in termini di non duplicare i dati ovunque)
e.GetProperty<string>("Name").Value = "blah";
Sì, questo è molto efficiente. Tuttavia, non è esattamente il più facile da leggere o scrivere; sembra molto goffo e lavora contro di te.
Personalmente vorrei fare qualcosa del tipo:
e.SetPosition(4, 5, 6);
e.Name = "Blah";
Anche se ovviamente l'unico modo per arrivare a quel tipo di design è tornato in Entity-> NPC-> Enemy-> FlyingEnemy-> FlyingEnemyWithAHatUn tipo di gerarchia che questo design cerca di evitare.
Qualcuno ha visto un design per questo tipo di sistema di componenti che è ancora flessibile, ma mantiene un livello di facilità d'uso? E del resto, riesce a aggirare l'archiviazione dei dati (probabilmente il problema più difficile) in modo positivo?
Quali progetti esistono per un sistema di entità basato su componenti che sia facile da usare ma comunque flessibile?