Class ResourceManager

Class Documentation

class ResourceManager

Менеджер ресурсов для управления глобальными данными в ECS-системе

Обеспечивает типобезопасное хранение и доступ к глобальным ресурсам, используя std::any для безопасного хранения объектов различных типов. Ресурсы представляют собой синглтон-подобные объекты, доступные всем системам сцены.

См. также

prism::scene::Resource

Public Functions

ResourceManager() = default
template<typename T>
inline void set(T resource)

Устанавливает или заменяет ресурс указанного типа

Сохраняет переданный объект в менеджере ресурсов. Если ресурс данного типа уже существует, он будет заменен новым.

Примеры использования :

// Создание ресурса с конструктором по умолчанию
resources.set<TimeResource>(TimeResource{});

// Создание ресурса с параметрами
resources.set<WindowConfig>(WindowConfig{1280, 720, "My Game"});

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

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

Параметры:

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

template<typename T>
inline T *get()

Получает указатель на ресурс указанного типа

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

/// Примеры использования:

// Получение ресурса для модификации
if (auto* time = resources.get<TimeResource>()) {
    time->update(deltaTime);
    time->setScale(2.0f);
}

// Цепочка вызовов
resources.get<WindowConfig>()->setResolution(1920, 1080);

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

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

Результат:

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

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

Получает константный указатель на ресурс указанного типа

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

/// Примеры использования:

// В константном методе системы
void render(const ResourceManager& resources) {
    if (const auto* config = resources.get<Config>()) {
        // config доступен только для чтения
        drawUI(config->getWidth(), config->getHeight());
    }
}

// Для отладочного вывода
void debugPrint(const ResourceManager& resources) {
    if (const auto* time = resources.get<TimeResource>()) {
        std::cout << "Game time: " << time->getTotalTime() << std::endl;
    }
}

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

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

Результат:

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

template<typename T>
inline bool has() const

Проверяет наличие ресурса указанного типа

Быстрая проверка существования ресурса без его загрузки. Используется для условной логики и ленивой инициализации ресурсов.

Примеры использования:

// Ленивая инициализация ресурса
if (!resources.has<Audio>()) {
    resources.set<Audio>(Audio{});
    resources.get<Audio>()->initialize();
}

// Условная логика системы
if (resources.has<DebugInfo>()) {
    drawDebugOverlay();
}

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

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

Результат:

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

template<typename T>
inline bool remove()

Удаляет ресурс указанного типа

Освобождает память, занимаемую ресурсом. std::any гарантирует корректный вызов деструктора хранимого объекта при удалении.

Примеры использования:

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

// Удаление при перезагрузке
resources.remove<Config>();
resources.set<Config>(loadConfigFromFile());

// Проверка успешности удаления
if (resources.remove<ObsoleteResource>()) {
    std::cout << "Obsolete resource removed" << std::endl;
}

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

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

Результат:

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

inline void clear()

Очищает все ресурсы

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

Пример использования:

// При перезапуске игры
resources.clear();
initializeDefaultResources(resources);

inline ~ResourceManager()

Деструктор

Автоматически очищает все ресурсы при уничтожении менеджера. Гарантирует корректное освобождение памяти и вызов деструкторов для всех хранимых объектов через механизмы std::any.