Я деякий час цікавився системою сутності на базі компонентів і читав про неї незліченну кількість статей ( Ігри Insomiac , досить стандартний Evolve Your Iierarchy , 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 ієрархії такого типу намагається уникнути.
Хтось бачив конструкцію для такого типу компонентної системи, яка все ще гнучка, але підтримує рівень зручності для користувачів? І з цього приводу вдається вдало обійти (мабуть, найскладнішу проблему) зберігання даних?
Які конструкції існують для компонентної системи сутності, зручної для користувачів, але все ще гнучкої?