Некоторое время я интересовался системой сущностей, основанной на компонентах, и читал бесчисленные статьи по ней ( игры Insomiac , довольно стандартная Evolve Your Hierarchy , T-Machine , Chronoclast ... и многие другие).
Кажется, что все они имеют внешнюю структуру:
Entity e = Entity.Create();
e.AddComponent(RenderComponent, ...);
//do lots of stuff
e.GetComponent<PositionComponent>(...).SetPos(4, 5, 6);
И если вы привнесете идею общих данных (это лучший дизайн, который я когда-либо видел, с точки зрения не дублирования данных везде)
e.GetProperty<string>("Name").Value = "blah";
Да, это очень эффективно. Тем не менее, это не совсем легко читать или писать; он чувствует себя очень неуклюже и работает против вас.
Я лично хотел бы сделать что-то вроде:
e.SetPosition(4, 5, 6);
e.Name = "Blah";
Хотя, конечно, единственный способ добраться до такого дизайна - вернуться к иерархии Entity-> NPC-> Enemy-> FlyingEnemy-> FlyingEnemyWithAHatOn, которую этот дизайн пытается избежать.
Кто-нибудь видел дизайн такого рода компонентной системы, который по-прежнему гибок, но при этом поддерживает уровень удобства для пользователя? И в этом отношении, удастся ли обойти (вероятно, самая сложная проблема) хранилище данных хорошим способом?
Какие проекты существуют для системы сущностей на основе компонентов, которые являются удобными для пользователя, но все же гибкими?