Loading...
Searching...
No Matches
ManifestResources.h
Go to the documentation of this file.
1// Copyright (c) 2025 Dave R. Smith. All rights reserved.
2// Malena Framework — Proprietary Software. See LICENSE for terms.
3
4//
5// ManifestResources.h
6//
7
8#ifndef MALENA_RESOURCES_H
9#define MALENA_RESOURCES_H
10
11#pragma once
12
17#include <type_traits>
18
19namespace ml
20{
21 // ── Per-type asset enum detection ─────────────────────────────────────────
22
24
25 template<typename Manifest, typename EnumType, typename = void>
26 struct is_images_enum : std::false_type {};
27 template<typename Manifest, typename EnumType>
28 struct is_images_enum<Manifest, EnumType,
29 std::void_t<typename Manifest::Images>>
30 : std::bool_constant<
31 std::is_same_v<EnumType, typename Manifest::Images>> {};
32
33 template<typename Manifest, typename EnumType, typename = void>
34 struct is_fonts_enum : std::false_type {};
35 template<typename Manifest, typename EnumType>
36 struct is_fonts_enum<Manifest, EnumType,
37 std::void_t<typename Manifest::Fonts>>
38 : std::bool_constant<
39 std::is_same_v<EnumType, typename Manifest::Fonts>> {};
40
41 template<typename Manifest, typename EnumType, typename = void>
42 struct is_sounds_enum : std::false_type {};
43 template<typename Manifest, typename EnumType>
44 struct is_sounds_enum<Manifest, EnumType,
45 std::void_t<typename Manifest::Sounds>>
46 : std::bool_constant<
47 std::is_same_v<EnumType, typename Manifest::Sounds>> {};
48
49 template<typename Manifest, typename EnumType>
50 struct is_asset_enum : std::bool_constant<
51 is_images_enum<Manifest, EnumType>::value ||
52 is_fonts_enum <Manifest, EnumType>::value ||
53 is_sounds_enum<Manifest, EnumType>::value
54 > {};
55
56 // Builds const T& from any type — strips ref, adds const, adds lvalue ref
57 template<typename T>
58 using const_ref_t = std::add_lvalue_reference_t<
59 std::add_const_t<
60 std::remove_reference_t<T>>>;
61
63
100 template<typename TManifest>
101 struct ManifestResources : public TManifest
102 {
110 template<typename EnumType>
111 static auto get(EnumType key)
112 -> std::enable_if_t<
113 is_asset_enum<TManifest, EnumType>::value,
114 const_ref_t<decltype(AssetsManager<TManifest>::get(key))>>
115 {
117 }
118
125 template<typename EnumType>
126 static auto get(EnumType key)
127 -> std::enable_if_t<
128 !is_asset_enum<TManifest, EnumType>::value,
129 decltype(ConfigManager<TManifest>::get(key))>
130 {
132 }
133
134 template<typename EnumType>
135 static std::enable_if_t<is_images_enum<TManifest, EnumType>::value>
136 unload(EnumType key)
137 {
139 }
140
141 template<typename EnumType>
142 static std::enable_if_t<is_fonts_enum<TManifest, EnumType>::value>
143 unload(EnumType key)
144 {
146 }
147
148 template<typename EnumType>
149 static std::enable_if_t<is_sounds_enum<TManifest, EnumType>::value>
150 unload(EnumType key)
151 {
153 }
154 };
155
156} // namespace ml
157
158#endif // MALENA_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:51
Definition Component.h:22
Unified manifest resource and config accessor.
static std::enable_if_t< is_fonts_enum< TManifest, EnumType >::value > unload(EnumType key)
static auto get(EnumType key) -> std::enable_if_t< !is_asset_enum< TManifest, EnumType >::value, decltype(ConfigManager< TManifest >::get(key))>
Retrieve a config value by enum key → ConfigManager.
static std::enable_if_t< is_sounds_enum< TManifest, EnumType >::value > unload(EnumType key)
static std::enable_if_t< is_images_enum< TManifest, EnumType >::value > unload(EnumType key)
static auto get(EnumType key) -> std::enable_if_t< is_asset_enum< TManifest, EnumType >::value, const_ref_t< decltype(AssetsManager< TManifest >::get(key))> >
Retrieve an asset by enum key → AssetsManager.