Class ComponentManager

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

Структура для прямого доступа к внутренним векторам компонентов и сущностей

Позволяет эффективно итерировать по компонентам без повторных поисков.

Public Members

const std::vector<T> &components

Плотный массив компонентов

const std::vector<Entity> &entities

Соответствующие сущности