diff --git a/engine/include/XCEngine/Resources/ResourceManager.h b/engine/include/XCEngine/Resources/ResourceManager.h index bda08de3..01c50f09 100644 --- a/engine/include/XCEngine/Resources/ResourceManager.h +++ b/engine/include/XCEngine/Resources/ResourceManager.h @@ -85,6 +85,23 @@ public: Containers::String ResolvePath(const Containers::String& relativePath) const; + template + void LoadGroup(const Containers::Array& paths, + std::function)> callback) { + for (const auto& path : paths) { + LoadAsync(path, GetResourceType(), [callback](LoadResult result) { + if (result && result.resource) { + callback(ResourceHandle(static_cast(result.resource))); + } else { + callback(ResourceHandle()); + } + }); + } + } + + Containers::Array GetResourcePaths() const; + void UnloadGroup(const Containers::Array& guids); + private: ResourceManager() = default; ~ResourceManager() = default; diff --git a/engine/include/XCEngine/Resources/Resources.h b/engine/include/XCEngine/Resources/Resources.h index 697546e9..a799b8be 100644 --- a/engine/include/XCEngine/Resources/Resources.h +++ b/engine/include/XCEngine/Resources/Resources.h @@ -8,6 +8,7 @@ #include "IResourceLoader.h" #include "ResourceCache.h" #include "AsyncLoader.h" +#include "ResourceDependencyGraph.h" #include "Texture.h" #include "TextureLoader.h" @@ -22,6 +23,7 @@ #include "ResourceFileSystem.h" #include "FileArchive.h" +#include "ResourcePackage.h" // Forward declarations for concrete resource types namespace XCEngine { diff --git a/engine/src/Resources/ResourceManager.cpp b/engine/src/Resources/ResourceManager.cpp index 18d0c7b2..d0dd6fa6 100644 --- a/engine/src/Resources/ResourceManager.cpp +++ b/engine/src/Resources/ResourceManager.cpp @@ -186,5 +186,26 @@ void ResourceManager::ReloadResource(ResourceGUID guid) { } } +Containers::Array ResourceManager::GetResourcePaths() const { + Containers::Array paths; + for (const auto& pair : m_guidToPath) { + paths.Add(pair.value); + } + return paths; +} + +void ResourceManager::UnloadGroup(const Containers::Array& guids) { + std::lock_guard lock(m_mutex); + for (const auto& guid : guids) { + auto* it = m_resourceCache.Find(guid); + if (it != nullptr) { + IResource* resource = *it; + m_resourceCache.Erase(guid); + m_memoryUsage -= resource->GetMemorySize(); + resource->Release(); + } + } +} + } // namespace Resources } // namespace XCEngine