le2d v0.4.3
2D game engine framework
 
Loading...
Searching...
No Matches
asset_type_loader.hpp
Go to the documentation of this file.
1#pragma once
2#include <klib/assert.hpp>
4#include <le2d/util.hpp>
5#include <gsl/pointers>
6#include <memory>
7#include <string_view>
8#include <typeindex>
9
10namespace le {
11namespace detail {
12class IAssetTypeLoaderBase : public klib::Polymorphic {
13 public:
14 [[nodiscard]] virtual auto type_name() const -> std::string_view = 0;
15 [[nodiscard]] virtual auto type_index() const -> std::type_index = 0;
16 [[nodiscard]] virtual auto load_base(std::string_view uri) const -> std::unique_ptr<IAsset> = 0;
17};
18} // namespace detail
19
21template <std::derived_from<IAsset> AssetTypeT>
22class IAssetTypeLoader : public detail::IAssetTypeLoaderBase {
23 public:
27 [[nodiscard]] virtual auto load_asset(std::string_view uri) const -> std::unique_ptr<AssetTypeT> = 0;
28
29 private:
30 [[nodiscard]] auto type_name() const -> std::string_view final { return util::demangled_name<AssetTypeT>(); }
31 [[nodiscard]] auto type_index() const -> std::type_index final { return std::type_index{typeid(AssetTypeT)}; }
32 [[nodiscard]] auto load_base(std::string_view uri) const -> std::unique_ptr<IAsset> final { return load_asset(uri); }
33};
34} // namespace le
Interface for a particular AssetType loader.
Definition asset_type_loader.hpp:22
virtual auto load_asset(std::string_view uri) const -> std::unique_ptr< AssetTypeT >=0
Primary customization point.
Interface for asset types.
Definition asset.hpp:8
Definition asset_type_loader.hpp:12
virtual auto type_index() const -> std::type_index=0
virtual auto type_name() const -> std::string_view=0
virtual auto load_base(std::string_view uri) const -> std::unique_ptr< IAsset >=0
Definition animation.hpp:8