В настоящее время я перепроектирую свою Entity System для C ++, и у меня много менеджеров. В моем дизайне у меня есть эти классы, чтобы связать мою библиотеку. Я слышал много плохих вещей, когда речь шла о классах «менеджера», возможно, я не правильно назвал свои классы. Однако я понятия не имею, как еще их назвать.
Большинство менеджеров в моей библиотеке состоят из этих классов (хотя они немного различаются):
- Контейнер - контейнер для объектов в менеджере
- Атрибуты - атрибуты для объектов в менеджере
В моем новом дизайне для моей библиотеки у меня есть эти конкретные классы, чтобы связать мою библиотеку вместе.
ComponentManager - управляет компонентами в Entity System
- ComponentContainer
- ComponentAttributes
- Сцена * - ссылка на сцену (см. Ниже)
SystemManager - управляет системами в Entity System
- SystemContainer
- Сцена * - ссылка на сцену (см. Ниже)
EntityManager - управляет объектами в Entity System
- EntityPool - пул сущностей
- EntityAttributes - атрибуты сущности (это будет доступно только для классов ComponentContainer и System)
- Сцена * - ссылка на сцену (см. Ниже)
Сцена - связывает всех менеджеров вместе
- ComponentManager
- SystemManager
- EntityManager
Я думал просто поместить все контейнеры / пулы в сам класс Scene.
т.е.
Вместо этого:
Scene scene; // create a Scene
// NOTE:
// I technically could wrap this line in a createEntity() call in the Scene class
Entity entity = scene.getEntityManager().getPool().create();
Было бы так:
Scene scene; // create a Scene
Entity entity = scene.getEntityPool().create();
Но я не уверен. Если бы я делал последнее, это означало бы, что у меня было бы много объектов и методов, объявленных внутри моего класса Scene.
ЗАМЕТКИ:
- Система сущностей - это просто дизайн, который используется для игр. Он состоит из 3 основных частей: компонентов, объектов и систем. Компоненты - это просто данные, которые могут быть «добавлены» к объектам, чтобы объекты были различимыми. Сущность представлена целым числом. Системы содержат логику для сущности с конкретными компонентами.
- Причина, по которой я меняю свой дизайн для своей библиотеки, заключается в том, что я думаю, что он может быть изменен довольно сильно, мне не нравится ощущение / поток к нему в данный момент.