Estou interessado no sistema de entidades baseado em componentes há um tempo e li inúmeros artigos sobre ele (Os jogos Insomiac , o bastante padrão Evolve Your Hierarchy , a T-Machine , Chronoclast ... só para citar alguns).
Todos eles parecem ter uma estrutura externa de algo como:
Entity e = Entity.Create();
e.AddComponent(RenderComponent, ...);
//do lots of stuff
e.GetComponent<PositionComponent>(...).SetPos(4, 5, 6);
E se você trouxer a ideia de dados compartilhados (este é o melhor design que eu já vi até agora, em termos de não duplicar dados em todos os lugares)
e.GetProperty<string>("Name").Value = "blah";
Sim, isso é muito eficiente. No entanto, não é exatamente o mais fácil de ler ou escrever; parece muito desajeitado e trabalhando contra você.
Pessoalmente, gostaria de fazer algo como:
e.SetPosition(4, 5, 6);
e.Name = "Blah";
Embora, é claro, a única maneira de chegar a esse tipo de design esteja de volta ao tipo de hierarquia Entidade-> NPC-> Enemy-> FlyingEnemy-> FlyingEnemyWithAHatOn que esse design tenta evitar.
Alguém viu um design para esse tipo de sistema de componentes que ainda é flexível, mas mantém um nível de facilidade de uso? E, nesse caso, consegue contornar o (provavelmente o problema mais difícil) o armazenamento de dados de uma maneira boa?
Que projetos existem para um sistema de entidade baseado em componentes que seja fácil de usar, mas ainda flexível?