Files
Commonwealth-Online-Public/plugin/lib/commonlibf4/include/RE/T/TESFormUtil.h
T
2026-05-30 18:33:24 +12:00

322 lines
10 KiB
C++

#pragma once
#include "RE/A/Actor.h"
#include "RE/A/ActorValueInfo.h"
#include "RE/A/AlchemyItem.h"
#include "RE/A/ArrowProjectile.h"
#include "RE/B/BGSAcousticSpace.h"
#include "RE/B/BGSAction.h"
#include "RE/B/BGSAddonNode.h"
#include "RE/B/BGSAimModel.h"
#include "RE/B/BGSArtObject.h"
#include "RE/B/BGSAssociationType.h"
#include "RE/B/BGSAttractionRule.h"
#include "RE/B/BGSAudioEffectChain.h"
#include "RE/B/BGSBendableSpline.h"
#include "RE/B/BGSBodyPartData.h"
#include "RE/B/BGSCameraPath.h"
#include "RE/B/BGSCameraShot.h"
#include "RE/B/BGSCollisionLayer.h"
#include "RE/B/BGSColorForm.h"
#include "RE/B/BGSComponent.h"
#include "RE/B/BGSConstructibleObject.h"
#include "RE/B/BGSDamageType.h"
#include "RE/B/BGSDebris.h"
#include "RE/B/BGSDefaultObject.h"
#include "RE/B/BGSDefaultObjectManager.h"
#include "RE/B/BGSDialogueBranch.h"
#include "RE/B/BGSDualCastData.h"
#include "RE/B/BGSEncounterZone.h"
#include "RE/B/BGSEquipSlot.h"
#include "RE/B/BGSExplosion.h"
#include "RE/B/BGSFootstep.h"
#include "RE/B/BGSFootstepSet.h"
#include "RE/B/BGSGodRays.h"
#include "RE/B/BGSHazard.h"
#include "RE/B/BGSHeadPart.h"
#include "RE/B/BGSIdleMarker.h"
#include "RE/B/BGSImpactData.h"
#include "RE/B/BGSImpactDataSet.h"
#include "RE/B/BGSInstanceNamingRules.h"
#include "RE/B/BGSKeyword.h"
#include "RE/B/BGSLensFlare.h"
#include "RE/B/BGSLightingTemplate.h"
#include "RE/B/BGSListForm.h"
#include "RE/B/BGSLocation.h"
#include "RE/B/BGSLocationRefType.h"
#include "RE/B/BGSMaterialObject.h"
#include "RE/B/BGSMaterialSwap.h"
#include "RE/B/BGSMaterialType.h"
#include "RE/B/BGSMenuIcon.h"
#include "RE/B/BGSMessage.h"
#include "RE/B/BGSMod.h"
#include "RE/B/BGSMovableStatic.h"
#include "RE/B/BGSMovementType.h"
#include "RE/B/BGSMusicTrackFormWrapper.h"
#include "RE/B/BGSMusicType.h"
#include "RE/B/BGSNote.h"
#include "RE/B/BGSOutfit.h"
#include "RE/B/BGSPackIn.h"
#include "RE/B/BGSPerk.h"
#include "RE/B/BGSProjectile.h"
#include "RE/B/BGSReferenceEffect.h"
#include "RE/B/BGSRelationship.h"
#include "RE/B/BGSReverbParameters.h"
#include "RE/B/BGSScene.h"
#include "RE/B/BGSShaderParticleGeometryData.h"
#include "RE/B/BGSSoundCategory.h"
#include "RE/B/BGSSoundCategorySnapshot.h"
#include "RE/B/BGSSoundDescriptorForm.h"
#include "RE/B/BGSSoundKeywordMapping.h"
#include "RE/B/BGSSoundOutput.h"
#include "RE/B/BGSSoundTagSet.h"
#include "RE/B/BGSStaticCollection.h"
#include "RE/B/BGSStoryManagerBranchNode.h"
#include "RE/B/BGSStoryManagerEventNode.h"
#include "RE/B/BGSStoryManagerQuestNode.h"
#include "RE/B/BGSTalkingActivator.h"
#include "RE/B/BGSTerminal.h"
#include "RE/B/BGSTextureSet.h"
#include "RE/B/BGSTransform.h"
#include "RE/B/BGSVoiceType.h"
#include "RE/B/BGSZoomData.h"
#include "RE/B/BarrierProjectile.h"
#include "RE/B/BeamProjectile.h"
#include "RE/C/ConeProjectile.h"
#include "RE/E/EffectSetting.h"
#include "RE/E/EnchantmentItem.h"
#include "RE/F/FlameProjectile.h"
#include "RE/G/GrenadeProjectile.h"
#include "RE/H/Hazard.h"
#include "RE/I/IngredientItem.h"
#include "RE/M/MissileProjectile.h"
#include "RE/N/NavMesh.h"
#include "RE/N/NavMeshInfoMap.h"
#include "RE/S/Script.h"
#include "RE/S/ScrollItem.h"
#include "RE/S/SpellItem.h"
#include "RE/T/TESAmmo.h"
#include "RE/T/TESClass.h"
#include "RE/T/TESClimate.h"
#include "RE/T/TESCombatStyle.h"
#include "RE/T/TESEffectShader.h"
#include "RE/T/TESEyes.h"
#include "RE/T/TESFaction.h"
#include "RE/T/TESFlora.h"
#include "RE/T/TESForm.h"
#include "RE/T/TESFurniture.h"
#include "RE/T/TESGlobal.h"
#include "RE/T/TESGrass.h"
#include "RE/T/TESIdleForm.h"
#include "RE/T/TESImageSpace.h"
#include "RE/T/TESImageSpaceModifier.h"
#include "RE/T/TESKey.h"
#include "RE/T/TESLandTexture.h"
#include "RE/T/TESLevCharacter.h"
#include "RE/T/TESLevItem.h"
#include "RE/T/TESLevSpell.h"
#include "RE/T/TESLoadScreen.h"
#include "RE/T/TESNPC.h"
#include "RE/T/TESObjectACTI.h"
#include "RE/T/TESObjectANIO.h"
#include "RE/T/TESObjectARMA.h"
#include "RE/T/TESObjectARMO.h"
#include "RE/T/TESObjectBOOK.h"
#include "RE/T/TESObjectCELL.h"
#include "RE/T/TESObjectCONT.h"
#include "RE/T/TESObjectDOOR.h"
#include "RE/T/TESObjectLAND.h"
#include "RE/T/TESObjectLIGH.h"
#include "RE/T/TESObjectMISC.h"
#include "RE/T/TESObjectREFR.h"
#include "RE/T/TESObjectSTAT.h"
#include "RE/T/TESObjectTREE.h"
#include "RE/T/TESObjectWEAP.h"
#include "RE/T/TESPackage.h"
#include "RE/T/TESQuest.h"
#include "RE/T/TESRace.h"
#include "RE/T/TESRegion.h"
#include "RE/T/TESShout.h"
#include "RE/T/TESSoulGem.h"
#include "RE/T/TESSound.h"
#include "RE/T/TESTopic.h"
#include "RE/T/TESTopicInfo.h"
#include "RE/T/TESWaterForm.h"
#include "RE/T/TESWeather.h"
#include "RE/T/TESWordOfPower.h"
#include "RE/T/TESWorldSpace.h"
#define F4SE_FORMUTIL(a_elem) \
case a_elem::FORM_ID: \
if constexpr (std::is_convertible_v<const a_elem*, const T*>) { \
return static_cast<const a_elem*>(this); \
} \
break
namespace RE
{
template <class T, class>
[[nodiscard]] T* TESForm::As() noexcept
{
return const_cast<T*>(static_cast<const TESForm*>(this)->As<T>());
}
template <class T, class>
[[nodiscard]] const T* TESForm::As() const noexcept
{
switch (GetFormType()) {
F4SE_FORMUTIL(TESForm);
F4SE_FORMUTIL(BGSKeyword);
F4SE_FORMUTIL(BGSLocationRefType);
F4SE_FORMUTIL(BGSAction);
F4SE_FORMUTIL(BGSTransform);
F4SE_FORMUTIL(BGSComponent);
F4SE_FORMUTIL(BGSTextureSet);
F4SE_FORMUTIL(BGSMenuIcon);
F4SE_FORMUTIL(TESGlobal);
F4SE_FORMUTIL(BGSDamageType);
F4SE_FORMUTIL(TESClass);
F4SE_FORMUTIL(TESFaction);
F4SE_FORMUTIL(BGSHeadPart);
F4SE_FORMUTIL(TESEyes);
F4SE_FORMUTIL(TESRace);
F4SE_FORMUTIL(TESSound);
F4SE_FORMUTIL(BGSAcousticSpace);
F4SE_FORMUTIL(EffectSetting);
F4SE_FORMUTIL(Script);
F4SE_FORMUTIL(TESLandTexture);
F4SE_FORMUTIL(EnchantmentItem);
F4SE_FORMUTIL(SpellItem);
F4SE_FORMUTIL(ScrollItem);
F4SE_FORMUTIL(TESObjectACTI);
F4SE_FORMUTIL(BGSTalkingActivator);
F4SE_FORMUTIL(TESObjectARMO);
F4SE_FORMUTIL(TESObjectBOOK);
F4SE_FORMUTIL(TESObjectCONT);
F4SE_FORMUTIL(TESObjectDOOR);
F4SE_FORMUTIL(IngredientItem);
F4SE_FORMUTIL(TESObjectLIGH);
F4SE_FORMUTIL(TESObjectMISC);
F4SE_FORMUTIL(TESObjectSTAT);
F4SE_FORMUTIL(BGSStaticCollection);
F4SE_FORMUTIL(BGSMovableStatic);
F4SE_FORMUTIL(TESGrass);
F4SE_FORMUTIL(TESObjectTREE);
F4SE_FORMUTIL(TESFlora);
F4SE_FORMUTIL(TESFurniture);
F4SE_FORMUTIL(TESObjectWEAP);
F4SE_FORMUTIL(TESAmmo);
F4SE_FORMUTIL(TESNPC);
F4SE_FORMUTIL(TESLevCharacter);
F4SE_FORMUTIL(TESKey);
F4SE_FORMUTIL(AlchemyItem);
F4SE_FORMUTIL(BGSIdleMarker);
F4SE_FORMUTIL(BGSNote);
F4SE_FORMUTIL(BGSProjectile);
F4SE_FORMUTIL(BGSHazard);
F4SE_FORMUTIL(BGSBendableSpline);
F4SE_FORMUTIL(TESSoulGem);
F4SE_FORMUTIL(BGSTerminal);
F4SE_FORMUTIL(TESLevItem);
F4SE_FORMUTIL(TESWeather);
F4SE_FORMUTIL(TESClimate);
F4SE_FORMUTIL(BGSShaderParticleGeometryData);
F4SE_FORMUTIL(BGSReferenceEffect);
F4SE_FORMUTIL(TESRegion);
F4SE_FORMUTIL(NavMeshInfoMap);
F4SE_FORMUTIL(TESObjectCELL);
F4SE_FORMUTIL(TESObjectREFR);
F4SE_FORMUTIL(Actor);
F4SE_FORMUTIL(MissileProjectile);
F4SE_FORMUTIL(ArrowProjectile);
F4SE_FORMUTIL(GrenadeProjectile);
F4SE_FORMUTIL(BeamProjectile);
F4SE_FORMUTIL(FlameProjectile);
F4SE_FORMUTIL(ConeProjectile);
F4SE_FORMUTIL(BarrierProjectile);
F4SE_FORMUTIL(Hazard);
F4SE_FORMUTIL(TESWorldSpace);
F4SE_FORMUTIL(TESObjectLAND);
F4SE_FORMUTIL(NavMesh);
F4SE_FORMUTIL(TESTopic);
F4SE_FORMUTIL(TESTopicInfo);
F4SE_FORMUTIL(TESQuest);
F4SE_FORMUTIL(TESIdleForm);
F4SE_FORMUTIL(TESPackage);
F4SE_FORMUTIL(TESCombatStyle);
F4SE_FORMUTIL(TESLoadScreen);
F4SE_FORMUTIL(TESLevSpell);
F4SE_FORMUTIL(TESObjectANIO);
F4SE_FORMUTIL(TESWaterForm);
F4SE_FORMUTIL(TESEffectShader);
F4SE_FORMUTIL(BGSExplosion);
F4SE_FORMUTIL(BGSDebris);
F4SE_FORMUTIL(TESImageSpace);
F4SE_FORMUTIL(TESImageSpaceModifier);
F4SE_FORMUTIL(BGSListForm);
F4SE_FORMUTIL(BGSPerk);
F4SE_FORMUTIL(BGSBodyPartData);
F4SE_FORMUTIL(BGSAddonNode);
F4SE_FORMUTIL(ActorValueInfo);
F4SE_FORMUTIL(BGSCameraShot);
F4SE_FORMUTIL(BGSCameraPath);
F4SE_FORMUTIL(BGSVoiceType);
F4SE_FORMUTIL(BGSMaterialType);
F4SE_FORMUTIL(BGSImpactData);
F4SE_FORMUTIL(BGSImpactDataSet);
F4SE_FORMUTIL(TESObjectARMA);
F4SE_FORMUTIL(BGSEncounterZone);
F4SE_FORMUTIL(BGSLocation);
F4SE_FORMUTIL(BGSMessage);
F4SE_FORMUTIL(BGSDefaultObjectManager);
F4SE_FORMUTIL(BGSDefaultObject);
F4SE_FORMUTIL(BGSLightingTemplate);
F4SE_FORMUTIL(BGSMusicType);
F4SE_FORMUTIL(BGSFootstep);
F4SE_FORMUTIL(BGSFootstepSet);
F4SE_FORMUTIL(BGSStoryManagerBranchNode);
F4SE_FORMUTIL(BGSStoryManagerQuestNode);
F4SE_FORMUTIL(BGSStoryManagerEventNode);
F4SE_FORMUTIL(BGSDialogueBranch);
F4SE_FORMUTIL(BGSMusicTrackFormWrapper);
F4SE_FORMUTIL(TESWordOfPower);
F4SE_FORMUTIL(TESShout);
F4SE_FORMUTIL(BGSEquipSlot);
F4SE_FORMUTIL(BGSRelationship);
F4SE_FORMUTIL(BGSScene);
F4SE_FORMUTIL(BGSAssociationType);
F4SE_FORMUTIL(BGSOutfit);
F4SE_FORMUTIL(BGSArtObject);
F4SE_FORMUTIL(BGSMaterialObject);
F4SE_FORMUTIL(BGSMovementType);
F4SE_FORMUTIL(BGSSoundDescriptorForm);
F4SE_FORMUTIL(BGSDualCastData);
F4SE_FORMUTIL(BGSSoundCategory);
F4SE_FORMUTIL(BGSSoundOutput);
F4SE_FORMUTIL(BGSCollisionLayer);
F4SE_FORMUTIL(BGSColorForm);
F4SE_FORMUTIL(BGSReverbParameters);
F4SE_FORMUTIL(BGSPackIn);
F4SE_FORMUTIL(BGSAimModel);
F4SE_FORMUTIL(BGSConstructibleObject);
F4SE_FORMUTIL(BGSMod::Attachment::Mod);
F4SE_FORMUTIL(BGSMaterialSwap);
F4SE_FORMUTIL(BGSZoomData);
F4SE_FORMUTIL(BGSInstanceNamingRules);
F4SE_FORMUTIL(BGSSoundKeywordMapping);
F4SE_FORMUTIL(BGSAudioEffectChain);
F4SE_FORMUTIL(BGSAttractionRule);
F4SE_FORMUTIL(BGSSoundCategorySnapshot);
F4SE_FORMUTIL(BGSSoundTagSet);
F4SE_FORMUTIL(BGSLensFlare);
F4SE_FORMUTIL(BGSGodRays);
default:
break;
}
return nullptr;
}
}
#undef F4SE_FORMUTIL