mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-06-11 07:18:11 -05:00
chore: add generic default asset constructors for all games
This commit is contained in:
@ -20,11 +20,12 @@ template<typename AssetType> struct AssetNameAccessor
|
||||
{
|
||||
public:
|
||||
static_assert(std::is_base_of_v<IAssetBase, AssetType>);
|
||||
// static constexpr bool IS_SINGLETON = false;
|
||||
|
||||
const char*& operator()(AssetType::Type& asset)
|
||||
{
|
||||
throw std::runtime_error();
|
||||
}
|
||||
// const char*& operator()(AssetType::Type& asset)
|
||||
// {
|
||||
// throw std::runtime_error("Not implemented");
|
||||
// }
|
||||
};
|
||||
|
||||
#define DEFINE_ASSET_NAME_ACCESSOR(assetType, nameProperty) \
|
||||
@ -32,9 +33,24 @@ public:
|
||||
{ \
|
||||
public: \
|
||||
static_assert(std::is_base_of_v<IAssetBase, assetType>); \
|
||||
static constexpr bool IS_SINGLETON = false; \
|
||||
\
|
||||
const char*& operator()(assetType::Type& asset) \
|
||||
{ \
|
||||
return asset.nameProperty; \
|
||||
} \
|
||||
}
|
||||
|
||||
#define DEFINE_ASSET_NAME_ACCESSOR_SINGLETON(assetType, singletonName) \
|
||||
template<> struct AssetNameAccessor<assetType> \
|
||||
{ \
|
||||
public: \
|
||||
static_assert(std::is_base_of_v<IAssetBase, assetType>); \
|
||||
static constexpr bool IS_SINGLETON = true; \
|
||||
\
|
||||
const char* const& operator()(assetType::Type& asset) \
|
||||
{ \
|
||||
static const char* NAME = singletonName; \
|
||||
return NAME; \
|
||||
} \
|
||||
}
|
||||
|
@ -168,3 +168,41 @@ namespace IW4
|
||||
using AssetVehicle = Asset<ASSET_TYPE_VEHICLE, VehicleDef>;
|
||||
using AssetAddonMapEnts = Asset<ASSET_TYPE_ADDON_MAP_ENTS, AddonMapEnts>;
|
||||
} // namespace IW4
|
||||
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetPhysPreset, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetPhysCollMap, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetXAnim, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetXModelSurfs, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetXModel, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetMaterial, info.name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetPixelShader, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetVertexShader, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetVertexDecl, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetTechniqueSet, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetImage, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetSound, aliasName);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetSoundCurve, filename);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetLoadedSound, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetClipMapSp, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetClipMapMp, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetComWorld, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetGameWorldSp, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetGameWorldMp, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetMapEnts, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetFxWorld, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetGfxWorld, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetLightDef, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetFont, fontName);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetMenuList, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetMenu, window.name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetLocalize, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetWeapon, szInternalName);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetFx, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetImpactFx, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetRawFile, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetStringTable, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetLeaderboard, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetStructuredDataDef, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetTracer, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetVehicle, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW4::AssetAddonMapEnts, name);
|
||||
|
@ -179,3 +179,44 @@ namespace IW5
|
||||
using AssetVehicle = Asset<ASSET_TYPE_VEHICLE, VehicleDef>;
|
||||
using AssetAddonMapEnts = Asset<ASSET_TYPE_ADDON_MAP_ENTS, AddonMapEnts>;
|
||||
} // namespace IW5
|
||||
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetPhysPreset, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetPhysCollMap, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetXAnim, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetXModelSurfs, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetXModel, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetMaterial, info.name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetPixelShader, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetVertexShader, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetVertexDecl, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetTechniqueSet, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetImage, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetSound, aliasName);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetSoundCurve, filename);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetLoadedSound, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetClipMap, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetComWorld, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetGlassWorld, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetPathData, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetVehicleTrack, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetMapEnts, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetFxWorld, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetGfxWorld, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetLightDef, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetFont, fontName);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetMenuList, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetMenu, window.name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetLocalize, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetAttachment, szInternalName);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetWeapon, szInternalName);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetFx, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetImpactFx, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetSurfaceFx, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetRawFile, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetScript, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetStringTable, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetLeaderboard, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetStructuredDataDef, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetTracer, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetVehicle, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(IW5::AssetAddonMapEnts, name);
|
||||
|
@ -148,5 +148,38 @@ namespace T5
|
||||
using AssetDDL = Asset<ASSET_TYPE_DDL, ddlRoot_t>;
|
||||
using AssetGlasses = Asset<ASSET_TYPE_GLASSES, Glasses>;
|
||||
using AssetEmblemSet = Asset<ASSET_TYPE_EMBLEMSET, EmblemSet>;
|
||||
|
||||
} // namespace T5
|
||||
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetPhysPreset, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetPhysConstraints, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetDestructibleDef, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetXAnim, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetXModel, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetMaterial, info.name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetTechniqueSet, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetImage, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetSoundBank, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetSoundPatch, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetClipMap, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetClipMapPvs, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetComWorld, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetGameWorldSp, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetGameWorldMp, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetMapEnts, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetGfxWorld, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetLightDef, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetFont, fontName);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetMenuList, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetMenu, window.name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetLocalize, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetWeapon, szInternalName);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetSoundDriverGlobals, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetFx, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR_SINGLETON(T5::AssetImpactFx, "ImpactFx");
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetRawFile, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetStringTable, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetPackIndex, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetXGlobals, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetDDL, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T5::AssetGlasses, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR_SINGLETON(T5::AssetEmblemSet, "EmblemSet");
|
||||
|
@ -1311,7 +1311,7 @@ namespace T5
|
||||
|
||||
struct SndPatch
|
||||
{
|
||||
char* name;
|
||||
const char* name;
|
||||
unsigned int elementCount;
|
||||
unsigned int* elements;
|
||||
unsigned int fileCount;
|
||||
|
@ -209,3 +209,53 @@ namespace T6
|
||||
using AssetFootstepFxTable = Asset<ASSET_TYPE_FOOTSTEPFX_TABLE, FootstepFXTableDef>;
|
||||
using AssetZBarrier = Asset<ASSET_TYPE_ZBARRIER, ZBarrierDef>;
|
||||
} // namespace T6
|
||||
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetPhysPreset, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetPhysConstraints, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetDestructibleDef, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetXAnim, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetXModel, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetMaterial, info.name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetTechniqueSet, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetImage, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetSoundBank, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetSoundPatch, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetClipMap, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetClipMapPvs, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetComWorld, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetGameWorldSp, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetGameWorldMp, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetMapEnts, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetGfxWorld, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetLightDef, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetFont, fontName);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetFontIcon, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetMenuList, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetMenu, window.name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetLocalize, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetWeapon, szInternalName);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetAttachment, szInternalName);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetAttachmentUnique, szInternalName);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetWeaponCamo, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetSoundDriverGlobals, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetFx, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR_SINGLETON(T6::AssetImpactFx, "ImpactFx");
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetRawFile, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetStringTable, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetLeaderboard, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetXGlobals, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetDDL, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetGlasses, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR_SINGLETON(T6::AssetEmblemSet, "EmblemSet");
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetScript, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetKeyValuePairs, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetVehicle, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetMemoryBlock, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetAddonMapEnts, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetTracer, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetSkinnedVerts, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetQdb, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetSlug, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetFootstepTable, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetFootstepFxTable, name);
|
||||
DEFINE_ASSET_NAME_ACCESSOR(T6::AssetZBarrier, name);
|
||||
|
Reference in New Issue
Block a user