Внутренние менеджеры ECS
EntityManager
-
class EntityManager
Менеджер для создания и управления сущностями
Обеспечивает создание, удаление и валидацию сущностей с использованием пула идентификаторов
Public Functions
-
Entity createEntity()
Создает новую сущность
Использует свободные ID из пула при наличии, иначе генерирует новый
- Результат:
Идентификатор созданной сущности
-
bool destroyEntity(Entity entityId)
Удаляет сущность и освобождает ее ID.
Освобожденный ID помещается в пул для повторного использования
- Параметры:
entityId – Идентификатор сущности для удаления
- Результат:
true если сущность успешно удалена, false если ID невалиден
-
bool isEntityValid(Entity entityId) const
Проверяет валидность идентификатора сущности
- Параметры:
entityId – Идентификатор сущности для проверки
- Результат:
true если сущность существует и валидна, false в противном случае
-
Entity createEntity()
ComponentManager
-
class ComponentManager
Менеджер для управления компонентами сущностей
Обеспечивает хранение, добавление, удаление и поиск компонентов
Public Functions
-
template<typename T>
inline bool addComponent(Entity entityId, T component) Добавляет компонент к сущности
Создает копию компонента и связывает его с сущностью
- Параметры шаблона:
T – Тип компонента
- Параметры:
entityId – Идентификатор сущности
component – Компонент для добавления
- Результат:
true если компонент успешно добавлен, false в противном случае
-
template<typename T>
inline bool removeComponent(Entity entityId) Удаляет компонент у сущности
- Параметры шаблона:
T – Тип компонента
- Параметры:
entityId – Идентификатор сущности
- Результат:
true если компонент существовал и был удален, false в противном случае
-
template<typename T>
inline T *getComponent(Entity entityId) Получает компонент сущности
- Параметры шаблона:
T – Тип компонента
- Параметры:
entityId – Идентификатор сущности
- Результат:
Указатель на компонент или nullptr если компонент не найден
-
template<typename T>
inline const std::set<Entity> &getEntitiesWith() const Получает все сущности, имеющие компонент указанного типа
- Параметры шаблона:
T – Тип компонента
- Результат:
Константная ссылка на множество сущностей с компонентом
-
template<typename ...ComponentTypes>
inline std::set<Entity> getEntitiesWithAll() const Получает все сущности, имеющие все указанные типы компонентов
Выполняет пересечение множеств сущностей для каждого типа компонента
- Параметры шаблона:
ComponentTypes – Типы компонентов для поиска
- Результат:
Множество сущностей, содержащих все запрошенные компоненты
-
void removeAllComponents(Entity entityId)
Удаляет все компоненты у сущности
- Параметры:
entityId – Идентификатор сущности
Private Functions
-
template<typename T>
inline ComponentStorage<T> &getComponentStorage() Получает хранилище для конкретного типа компонента
- Параметры шаблона:
T – Тип компонента
- Результат:
Ссылка на хранилище компонентов типа T
Private Members
-
std::unordered_map<std::type_index, std::unique_ptr<IComponentStorage>> componentStorages
Карта хранилищ компонентов по типу
-
template<typename T>
struct ComponentStorage : public prism::scene::ComponentManager::IComponentStorage Конкретная реализация хранилища для типа компонента
- Параметры шаблона:
T – Тип компонента
-
struct IComponentStorage
Базовый интерфейс хранилища компонентов
Public Functions
-
virtual void removeEntity(Entity entityId) = 0
Удаляет все компоненты сущности из хранилища
- Параметры:
entityId – Идентификатор сущности
-
virtual void removeEntity(Entity entityId) = 0
-
template<typename T>
SystemManager
-
class SystemManager
Менеджер систем для регистрации, включения/выключения и обновления систем.
Управляет коллекцией систем, обновляя их в порядке регистрации.
Public Functions
-
template<typename T, typename ...Args>
inline SystemId registerSystem(Args&&... args) Регистрирует новую систему в менеджере.
Создает экземпляр системы и добавляет его в список управления
- Параметры шаблона:
T – Тип системы (должен быть производным от ISystem).
Args – Типы аргументов для конструктора системы.
- Параметры:
args – Аргументы для передачи конструктору системы.
- Результат:
Идентификатор зарегистрированной системы.
-
void enableSystem(SystemId systemId)
Включает систему по идентификатору.
- Параметры:
systemId – Идентификатор системы, которую нужно включить.
-
void disableSystem(SystemId systemId)
Выключает систему по идентификатору.
- Параметры:
systemId – Идентификатор системы, которую нужно выключить.
-
void update(float deltaTime)
Обновляет все активные системы
Вызывает update() для всех включенных систем в порядке регистрации
- Параметры:
deltaTime – Время, прошедшее с предыдущего обновления
-
template<typename T, typename ...Args>
Оптимизации
Пул сущностей - переиспользование ID
Раздельное хранение - компоненты по типам
Быстрый поиск - индексация сущностей по компонентам