Przez jakiś czas interesowałem się systemem encji opartym na komponentach i czytałem o nim niezliczone artykuły ( gry Insomiac , dość standardowy Evolve Your Hierarchy , T-Machine , Chronoclast ... żeby wymienić tylko kilka).
Wszystkie wydają się mieć strukturę na zewnątrz czegoś takiego jak:
Entity e = Entity.Create();
e.AddComponent(RenderComponent, ...);
//do lots of stuff
e.GetComponent<PositionComponent>(...).SetPos(4, 5, 6);
A jeśli wprowadzisz pomysł udostępniania danych (jest to najlepszy projekt, jaki do tej pory widziałem, pod względem nie powielania danych wszędzie)
e.GetProperty<string>("Name").Value = "blah";
Tak, to jest bardzo wydajne. Jednak nie jest to najłatwiejszy do odczytu lub zapisu; czuje się bardzo niezręcznie i działa przeciwko tobie.
Osobiście chciałbym zrobić coś takiego:
e.SetPosition(4, 5, 6);
e.Name = "Blah";
Chociaż oczywiście jedynym sposobem, aby dostać się do tego rodzaju projektu, jest powrót w rodzaju hierarchii Entity-> NPC-> Enemy-> FlyingEnemy-> FlyingEnemyWithAHatOn.
Czy ktoś widział projekt tego rodzaju systemu komponentów, który jest wciąż elastyczny, ale zachowuje poziom przyjazności dla użytkownika? A jeśli chodzi o tę sprawę, udaje się obejść (prawdopodobnie najtrudniejszy problem) przechowywanie danych w dobry sposób?
Jakie są projekty systemu jednostek opartego na komponentach, który jest przyjazny dla użytkownika, ale nadal elastyczny?