Loading...
Searching...
No Matches
ManifestResources.h
Go to the documentation of this file.
1//
2// ManifestResources.h
3//
4
5#ifndef RESOURCES_H
6#define RESOURCES_H
7
8#pragma once
9
13#include <type_traits>
14
15namespace ml
16{
17 // ── Per-type asset enum detection ─────────────────────────────────────────
18
20
21 template<typename Manifest, typename EnumType, typename = void>
22 struct is_images_enum : std::false_type {};
23 template<typename Manifest, typename EnumType>
24 struct is_images_enum<Manifest, EnumType,
25 std::void_t<typename Manifest::Images>>
26 : std::bool_constant<
27 std::is_same_v<EnumType, typename Manifest::Images>> {};
28
29 template<typename Manifest, typename EnumType, typename = void>
30 struct is_fonts_enum : std::false_type {};
31 template<typename Manifest, typename EnumType>
32 struct is_fonts_enum<Manifest, EnumType,
33 std::void_t<typename Manifest::Fonts>>
34 : std::bool_constant<
35 std::is_same_v<EnumType, typename Manifest::Fonts>> {};
36
37 template<typename Manifest, typename EnumType, typename = void>
38 struct is_sounds_enum : std::false_type {};
39 template<typename Manifest, typename EnumType>
40 struct is_sounds_enum<Manifest, EnumType,
41 std::void_t<typename Manifest::Sounds>>
42 : std::bool_constant<
43 std::is_same_v<EnumType, typename Manifest::Sounds>> {};
44
45 template<typename Manifest, typename EnumType>
46 struct is_asset_enum : std::bool_constant<
47 is_images_enum<Manifest, EnumType>::value ||
48 is_fonts_enum <Manifest, EnumType>::value ||
49 is_sounds_enum<Manifest, EnumType>::value
50 > {};
51
52 // Builds const T& from any type — strips ref, adds const, adds lvalue ref
53 template<typename T>
54 using const_ref_t = std::add_lvalue_reference_t<
55 std::add_const_t<
56 std::remove_reference_t<T>>>;
57
59
96 template<typename Manifest>
97 struct ManifestResources : public ManifestAliases<Manifest>
98 {
106 template<typename EnumType>
107 static auto get(EnumType key)
108 -> std::enable_if_t<
109 is_asset_enum<Manifest, EnumType>::value,
110 const_ref_t<decltype(AssetsManager<Manifest>::get(key))>>
111 {
113 }
114
121 template<typename EnumType>
122 static auto get(EnumType key)
123 -> std::enable_if_t<
124 !is_asset_enum<Manifest, EnumType>::value,
125 decltype(ConfigManager<Manifest>::get(key))>
126 {
128 }
129
130 // In ManifestResources — after the get() overloads
131
132 template<typename EnumType>
133 static std::enable_if_t<is_images_enum<Manifest, EnumType>::value>
134 unload(EnumType key)
135 {
137 }
138
139 template<typename EnumType>
140 static std::enable_if_t<is_fonts_enum<Manifest, EnumType>::value>
141 unload(EnumType key)
142 {
144 }
145
146 template<typename EnumType>
147 static std::enable_if_t<is_sounds_enum<Manifest, EnumType>::value>
148 unload(EnumType key)
149 {
151 }
152 };
153
154} // namespace ml
155
156#endif // RESOURCES_H
static std::enable_if_t< has_Image< M >::value, const sf::Texture & > get(typename M::Images image)
Retrieve a cached sf::Texture by manifest enum value.
static std::enable_if_t< has_Strings< M >::value, const std::string & > get(typename M::Text config)
Retrieve a string config value.
Base class for all Malena manifests.
Definition Manifest.h:81
Definition Component.h:18
Pulls manifest inner type aliases into a class's scope.
Unified manifest resource and config accessor.
static std::enable_if_t< is_sounds_enum< Manifest, EnumType >::value > unload(EnumType key)
static std::enable_if_t< is_images_enum< Manifest, EnumType >::value > unload(EnumType key)
static std::enable_if_t< is_fonts_enum< Manifest, EnumType >::value > unload(EnumType key)
static auto get(EnumType key) -> std::enable_if_t< !is_asset_enum< Manifest, EnumType >::value, decltype(ConfigManager< Manifest >::get(key))>
Retrieve a config value by enum key → ConfigManager.
static auto get(EnumType key) -> std::enable_if_t< is_asset_enum< Manifest, EnumType >::value, const_ref_t< decltype(AssetsManager< Manifest >::get(key))> >
Retrieve an asset by enum key → AssetsManager.