2
0
mirror of https://github.com/Laupetin/OpenAssetTools.git synced 2026-06-06 16:52:35 +00:00

refactor: introduce subasset loading

This commit is contained in:
Jan Laupetin
2026-02-05 16:25:00 +00:00
parent 1be411b371
commit aa47ffa629
255 changed files with 1668 additions and 3132 deletions
+28 -12
View File
@@ -5,20 +5,39 @@
#include <stdexcept>
#include <type_traits>
struct IAssetBase
{
};
template<asset_type_t AssetTypeEnum, typename AssetType> class Asset : IAssetBase
template<asset_type_t AssetTypeEnum, class AssetType> class Asset
{
public:
static constexpr bool IS_ASSET = true;
static constexpr auto EnumEntry = AssetTypeEnum;
using Type = AssetType;
};
template<typename AssetType> struct AssetNameAccessor
template<asset_type_t AssetTypeEnum, class AssetType> class SubAsset
{
public:
static constexpr bool IS_ASSET = false;
static constexpr auto EnumEntry = AssetTypeEnum;
using Type = AssetType;
};
template<typename T>
concept HasAssetEnumEntry = std::is_integral_v<decltype(T::EnumEntry)>;
template<typename T>
concept HasAssetType = std::is_class_v<typename T::Type>;
template<typename T>
concept AssetOrSubAssetDefinition = HasAssetEnumEntry<T> && HasAssetType<T>;
template<typename T>
concept AssetDefinition = AssetOrSubAssetDefinition<T> && T::IS_ASSET;
template<typename T>
concept SubAssetDefinition = AssetOrSubAssetDefinition<T> && !T::IS_ASSET;
template<AssetOrSubAssetDefinition> struct AssetNameAccessor
{
static_assert(std::is_base_of_v<IAssetBase, AssetType>);
// static constexpr bool IS_SINGLETON = false;
// using RETURN_TYPE = const char*&;
@@ -32,7 +51,6 @@ template<typename AssetType> struct AssetNameAccessor
template<> struct AssetNameAccessor<assetType> \
{ \
public: \
static_assert(std::is_base_of_v<IAssetBase, assetType>); \
static constexpr bool IS_SINGLETON = false; \
using RETURN_TYPE = const char*&; \
\
@@ -46,7 +64,6 @@ template<typename AssetType> struct AssetNameAccessor
template<> struct AssetNameAccessor<assetType> \
{ \
public: \
static_assert(std::is_base_of_v<IAssetBase, assetType>); \
static constexpr bool IS_SINGLETON = true; \
using RETURN_TYPE = const char* const&; \
\
@@ -57,8 +74,7 @@ template<typename AssetType> struct AssetNameAccessor
} \
}
template<typename AssetType> AssetNameAccessor<AssetType>::RETURN_TYPE AssetName(typename AssetType::Type& asset)
template<AssetDefinition Asset_t> AssetNameAccessor<Asset_t>::RETURN_TYPE AssetName(typename Asset_t::Type& asset)
{
static_assert(std::is_base_of_v<IAssetBase, AssetType>);
return AssetNameAccessor<AssetType>::GetAssetName(asset);
return AssetNameAccessor<Asset_t>::GetAssetName(asset);
}