Class ResourceManager
Defined in File resourceManager.h
Class Documentation
-
class ResourceManager
Менеджер ресурсов для управления глобальными данными в ECS-системе
Обеспечивает типобезопасное хранение и доступ к глобальным ресурсам, используя std::any для безопасного хранения объектов различных типов. Ресурсы представляют собой синглтон-подобные объекты, доступные всем системам сцены.
См. также
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.
-
ResourceManager() = default