Files
XCEngine/Pipeline/Core/SourceIndex/ProjectAssetIndex.h

34 lines
1.1 KiB
C++

#pragma once
#include <XCEngine/Core/Asset/IProjectAssetPipelineService.h>
#include <shared_mutex>
#include <unordered_map>
namespace XCEngine {
namespace Resources {
class ProjectAssetIndex {
public:
void ResetProjectRoot(const Containers::String& projectRoot = Containers::String());
void RefreshFrom(const IProjectAssetResolver& resolver);
bool TryGetAssetRef(IProjectAssetPipelineService& pipelineService,
const Containers::String& path,
ResourceType resourceType,
AssetRef& outRef) const;
bool TryResolveAssetPath(const IProjectAssetResolver& resolver,
const AssetRef& assetRef,
Containers::String& outPath) const;
void RememberResolvedPath(const AssetGUID& assetGuid, const Containers::String& relativePath);
private:
mutable std::shared_mutex m_mutex;
Containers::String m_projectRoot;
std::unordered_map<std::string, AssetGUID> m_assetGuidByPathKey;
std::unordered_map<AssetGUID, Containers::String> m_assetPathByGuid;
};
} // namespace Resources
} // namespace XCEngine