NazaraEngine/include/Nazara/Core/Asset.hpp

30 lines
750 B
C++

#pragma once
#include <Nazara/Core/AssetDescriptor.hpp>
namespace Nz
{
template <typename TResource>
class Asset final
{
public:
const std::shared_ptr<TResource>& Get() const { return m_resource; }
explicit operator bool() const noexcept { return !!m_resource; }
TResource& operator*() { return *m_resource.get(); }
const TResource& operator*() const { return *m_resource.get(); }
TResource* operator->() { return m_resource.get(); }
const TResource* operator->() const { return m_resource.get(); }
static Asset LoadFromFile(const std::filesystem::path& path);
protected:
AssetDescriptor<TResource> m_descriptor;
std::shared_ptr<TResource> m_resource;
friend class AssetCatalog;
};
}
#include <Nazara/Core/Asset.inl>