mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-06-12 15:58:28 -05:00
chore: generalize default asset creators
This commit is contained in:
@ -2,6 +2,9 @@
|
||||
|
||||
#include "Zone/ZoneTypes.h"
|
||||
|
||||
#include <stdexcept>
|
||||
#include <type_traits>
|
||||
|
||||
struct IAssetBase
|
||||
{
|
||||
};
|
||||
@ -12,3 +15,26 @@ public:
|
||||
static constexpr auto EnumEntry = AssetTypeEnum;
|
||||
using Type = AssetType;
|
||||
};
|
||||
|
||||
template<typename AssetType> struct AssetNameAccessor
|
||||
{
|
||||
public:
|
||||
static_assert(std::is_base_of_v<IAssetBase, AssetType>);
|
||||
|
||||
const char*& operator()(AssetType::Type& asset)
|
||||
{
|
||||
throw std::runtime_error();
|
||||
}
|
||||
};
|
||||
|
||||
#define DEFINE_ASSET_NAME_ACCESSOR(assetType, nameProperty) \
|
||||
template<> struct AssetNameAccessor<assetType> \
|
||||
{ \
|
||||
public: \
|
||||
static_assert(std::is_base_of_v<IAssetBase, assetType>); \
|
||||
\
|
||||
const char*& operator()(assetType::Type& asset) \
|
||||
{ \
|
||||
return asset.nameProperty; \
|
||||
} \
|
||||
}
|
||||
|
@ -113,3 +113,32 @@ namespace IW3
|
||||
using AssetRawFile = Asset<ASSET_TYPE_RAWFILE, RawFile>;
|
||||
using AssetStringTable = Asset<ASSET_TYPE_STRINGTABLE, StringTable>;
|
||||
} // namespace IW3
|
||||
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetXModelPieces, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetPhysPreset, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetXAnim, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetXModel, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetMaterial, info.name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetTechniqueSet, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetImage, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetSound, aliasName);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetSoundCurve, filename);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetLoadedSound, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetClipMap, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetClipMapPvs, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetComWorld, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetGameWorldSp, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetGameWorldMp, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetMapEnts, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetGfxWorld, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetLightDef, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetFont, fontName);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetMenuList, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetMenu, window.name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetLocalize, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetWeapon, szInternalName);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetSoundDriverGlobals, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetFx, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetImpactFx, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetRawFile, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW3::AssetStringTable, name);
|
||||
|
Reference in New Issue
Block a user