Class Scene

Class Documentation

class Scene

Основной класс сцены, объединяющий менеджеры сущностей, компонентов и систем

Координирует работу всех подсистем ECS (Entity-Component-System)

Public Functions

Scene() = default
Entity createEntity()

Создает новую сущность на сцене

Результат:

Идентификатор созданной сущности

bool destroyEntity(Entity entityId)

Удаляет сущность со сцены

Удаляет все компоненты сущности перед ее уничтожением

Параметры:

entityId – Идентификатор сущности для удаления

Результат:

true если сущность успешно удалена

void enableSystem(SystemId systemId)

Включает систему на сцене

Параметры:

systemId – Идентификатор системы для включения

void disableSystem(SystemId systemId)

Выключает систему на сцене

Параметры:

systemId – Идентификатор системы для выключения

inline void update()

Обновляет все активные системы сцены

template<typename T>
inline bool addComponent(Entity entityId, T component)

Добавляет компонент к сущности на сцене

Параметры шаблона:

T – Тип компонента

Параметры:
  • entityId – Идентификатор сущности

  • component – Компонент для добавления

Результат:

true если компонент успешно добавлен

template<typename T>
inline bool removeComponent(Entity entityId)

Удаляет компонент у сущности на сцене

Параметры шаблона:

T – Тип компонента

Параметры:

entityId – Идентификатор сущности

Результат:

true если компонент существовал и был удален

template<typename T>
inline T *getComponent(Entity entityId)

Получает компонент сущности

Параметры шаблона:

T – Тип компонента

Параметры:

entityId – Идентификатор сущности

Результат:

Указатель на компонент или nullptr если не найден

template<typename T>
inline std::set<Entity> &getEntitiesWith()

Получает все сущности, имеющие компонент указанного типа

Параметры шаблона:

T – Тип компонента

Результат:

Ссылка на множество сущностей с компонентом

template<typename ...ComponentTypes>
inline std::set<Entity> getEntitiesWithAll()

Получает сущности, имеющие все указанные типы компонентов

Параметры шаблона:

ComponentTypes – Типы компонентов для поиска

Результат:

Множество сущностей, содержащих все запрошенные компоненты

template<typename T, typename ...Args>
inline SystemId registerSystem(Args&&... args)

Регистрирует новую систему на сцене

Параметры шаблона:
  • T – Тип системы (должен наследоваться от ISystem)

  • Args – Типы аргументов для конструктора системы

Параметры:

args – Аргументы для передачи в конструктор системы

Результат:

Идентификатор зарегистрированной системы

template<typename T>
inline void setResource(T resource)

Устанавливает или заменяет глобальный ресурс на сцене

Ресурсы представляют собой глобальные данные, доступные всем системам. Каждый тип ресурса может существовать только в одном экземпляре на сцене.

Пример:

// Установка стандартных ресурсов
scene.setResource<Time>(Time{});
scene.setResource<Input>(Input{});
scene.setResource<Config>(Config{1920, 1080, "My Game"});

// Замена ресурса
scene.setResource<Config>(loadConfigFromFile("settings.cfg"));

Параметры шаблона:

T – Тип ресурса

Параметры:

resource – Объект ресурса для установки

template<typename T>
inline T *getResource()

Получает глобальный ресурс сцены

Обеспечивает доступ к глобальным данным сцены. Возвращаемый указатель можно использовать для модификации ресурса.

Пример:

// В системе времени
if (auto* time = scene.getResource<Time>()) {
    time->update(deltaTime);
}

// В системе ввода
if (auto* input = scene.getResource<Input>()) {
    if (input->isKeyPressed(KEY_SPACE)) {
        jump();
    }
}

Параметры шаблона:

T – Тип запрашиваемого ресурса

Результат:

Указатель на ресурс или nullptr если ресурс не найден

template<typename T>
inline const T *getResource() const

Получает константный глобальный ресурс сцены

Предназначен для безопасного доступа только для чтения к глобальным ресурсам сцены. Используется в константных контекстах.

Пример:

// В константном методе рендеринга
void render(const Scene& scene) {
    if (const auto* config = scene.getResource<Config>()) {
        setResolution(config->width, config->height);
    }
}

Параметры шаблона:

T – Тип запрашиваемого ресурса

Результат:

Константный указатель на ресурс или nullptr если ресурс не найден

template<typename T>
inline bool hasResource() const

Проверяет наличие глобального ресурса на сцене

Быстрая проверка существования ресурса без его загрузки.

Пример:

// Ленивая инициализация ресурса
if (!scene.hasResource<Audio>()) {
    scene.setResource<Audio>(Audio{});
    scene.getResource<Audio>()->initialize();
}

Параметры шаблона:

T – Тип проверяемого ресурса

Результат:

true если ресурс существует, false в противном случае

template<typename T>
inline bool removeResource()

Удаляет глобальный ресурс со сцены

Освобождает память, занимаемую ресурсом. Последующие вызовы getResource() для этого типа вернут nullptr.

Пример:

// Удаление временного ресурса
scene.removeResource<DebugOverlay>();

// Удаление при перезагрузке
scene.removeResource<Config>();
scene.setResource<Config>(loadNewConfig());

Параметры шаблона:

T – Тип удаляемого ресурса

Результат:

true если ресурс был удален, false если ресурс не существовал