Class ComponentManager
Defined in File componentManager.h
Nested Relationships
Nested Types
Class Documentation
-
class ComponentManager
Менеджер для управления компонентами сущностей
Обеспечивает хранение, добавление, удаление и поиск компонентов Компоненты хранятся в плотных массивах (cache-friendly) с использованием техники «sparse set» для быстрого доступа. Это обеспечивает отличную локальность данных при массовой обработке.
Public Functions
-
ComponentManager() = default
-
template<typename T>
inline bool addComponent(Entity entityId, T &&component) Добавляет компонент к сущности
Если компонент у сущности уже существует, он будет заменён. Благодаря perfect forwarding избегаются лишние копирования.
- Параметры шаблона:
T – Тип компонента
- Параметры:
entityId – Идентификатор сущности
component – Компонент для добавления (может быть lvalue или rvalue)
- Результат:
true если компонент успешно добавлен, false в противном случае
-
template<typename T>
inline bool removeComponent(Entity entityId) Удаляет компонент у сущности
- Параметры шаблона:
T – Тип компонента
- Параметры:
entityId – Идентификатор сущности
- Результат:
true если компонент существовал и был удален, false в противном случае
-
template<typename T>
inline bool hasComponent(Entity entityId) const Проверяет, есть ли у сущности компонент типа T.
-
template<typename T>
inline T *getComponent(Entity entityId) Получает указатель на компонент сущности
- Параметры шаблона:
T – Тип компонента
- Параметры:
entityId – Идентификатор сущности
- Результат:
Указатель на компонент или nullptr, если компонент не найден
-
template<typename T>
inline const std::vector<Entity> &getEntitiesWith() const Получает все сущности, имеющие компонент указанного типа
- Параметры шаблона:
T – Тип компонента
- Результат:
Константная ссылка на * *вектор * *сущностей с компонентом. Вектор является частью внутреннего хранилища и обладает отличной локальностью данных. Время жизни ссылки ограничено временем жизни менеджера, но она остаётся валидной при добавлении/удалении других сущностей (кроме удаления последней сущности с компонентом T).
-
template<typename T>
inline StorageView<T> view() const Возвращает view на хранилище компонентов типа T.
- Результат:
StorageView, содержащий ссылки на внутренние векторы. Если хранилище не создано, возвращает view с пустыми векторами.
-
template<typename ...ComponentTypes>
inline std::vector<Entity> getEntitiesWithAll() const Получает все сущности, имеющие все указанные типы компонентов
Выполняет пересечение множеств сущностей для каждого типа компонента Порядок сущностей сохраняется из наименьшего вектора-кандидата. Вектор не содержит дубликатов.
- Параметры шаблона:
ComponentTypes – Типы компонентов для поиска
- Результат:
Вектор сущностей, содержащих все запрошенные компоненты
-
void removeAllComponents(Entity entityId)
Удаляет все компоненты у сущности
- Параметры:
entityId – Идентификатор сущности
-
template<typename T>
struct StorageView Структура для прямого доступа к внутренним векторам компонентов и сущностей
Позволяет эффективно итерировать по компонентам без повторных поисков.
-
ComponentManager() = default