3#include <klib/assert.hpp>
8#include <unordered_map>
16 void add_loader(std::unique_ptr<detail::IAssetTypeLoaderBase> loader);
20 template <std::derived_from<IAsset> AssetTypeT>
22 return m_map.contains(
typeid(AssetTypeT));
29 template <std::derived_from<IAsset> AssetTypeT>
30 [[nodiscard]]
auto load(std::string_view
const uri)
const -> std::unique_ptr<AssetTypeT> {
31 auto ret = load_impl(
typeid(AssetTypeT), uri);
32 if (!ret) {
return {}; }
33 KLIB_ASSERT(
dynamic_cast<AssetTypeT*
>(ret.get()));
34 return std::unique_ptr<AssetTypeT>{
dynamic_cast<AssetTypeT*
>(ret.release())};
38 [[nodiscard]]
auto load_impl(std::type_info
const& type, std::string_view uri)
const -> std::unique_ptr<IAsset>;
40 std::unordered_map<std::type_index, std::unique_ptr<detail::IAssetTypeLoaderBase>> m_map{};
Set of AssetTypeLoaders mapped to their corrseponding AssetTypes.
Definition asset_loader.hpp:12
void add_loader(std::unique_ptr< detail::IAssetTypeLoaderBase > loader)
Associate a loader with its type.
auto has_loader() const -> bool
Definition asset_loader.hpp:21
auto load(std::string_view const uri) const -> std::unique_ptr< AssetTypeT >
Load an asset given its URI.
Definition asset_loader.hpp:30
Definition animation.hpp:8