#pragma once #include "RE/B/BGSMod.h" #include "RE/B/BGSPreviewTransform.h" #include "RE/B/BGSSoundTagComponent.h" #include "RE/B/BSFixedString.h" #include "RE/B/BSTSmartPointer.h" #include "RE/N/NiNPShortPoint3.h" #include "RE/N/NiPointer.h" #include "RE/T/TBO_InstanceData.h" #include "RE/T/TESObject.h" namespace RE { enum class COMMAND_REFUSAL_TYPE; class BGSObjectInstanceExtra; class __declspec(novtable) TESBoundObject : public TESObject // 00 { public: static constexpr auto RTTI{ RTTI::TESBoundObject }; static constexpr auto VTABLE{ VTABLE::TESBoundObject }; static constexpr auto FORM_ID{ ENUM_FORM_ID::kNONE }; class BOUND_DATA { public: // members NiNPShortPoint3 boundMin; // 00 NiNPShortPoint3 boundMax; // 06 }; static_assert(sizeof(BOUND_DATA) == 0xC); // add virtual TBO_InstanceData* CreateInstanceData(const TBO_InstanceData*) const { return nullptr; } // 56 virtual const TBO_InstanceData* GetBaseInstanceData() const { return nullptr; } // 57 virtual bool GetAttachedMarkersVisible(NiAVObject*) const { return false; } // 58 virtual void SetAttachedMarkersVisible(NiAVObject*, bool) const { return; } // 59 virtual bool QSupportsCountPerInstance() const { return false; } // 5A virtual void SetObjectVoiceType(BGSVoiceType*) { return; } // 5B virtual BGSVoiceType* GetObjectVoiceType() const { return nullptr; } // 5C virtual BGSSoundDescriptorForm* GetSoundForTag(const BSFixedString& a_tag) const; // 5D virtual void Clone3D(TESObjectREFR* a_requester, NiPointer& a_obj3D) { TESObject::Clone3D(a_requester, a_obj3D, false); } // 5E virtual bool ReplaceModel(const char* a_filename); // 5F virtual bool GetActivateText(TESObjectREFR* a_itemActivated, BSString& a_resultString); // 60 virtual COMMAND_REFUSAL_TYPE CalculateDoFavor(Actor* a_actor, bool a_owned, TESObjectREFR*, float a_moralityMult) const; // 61 virtual void HandleRemoveItemFromContainer(TESObjectREFR*) { return; } // 62 virtual void OnRemove3D(NiAVObject*) { return; } // 63 virtual void OnCheckModels() { return; } // 64 virtual void OnCopyReference() { return; } // 65 virtual void OnFinishScale() { return; } // 66 void ApplyMods(BSTSmartPointer& a_dest, const BGSObjectInstanceExtra* a_extra) const { using func_t = decltype(&TESBoundObject::ApplyMods); static REL::Relocation func{ ID::TESBoundObject::ApplyMods }; return func(this, a_dest, a_extra); } // members BOUND_DATA boundData; // 20 BGSMod::Template::Items objectTemplate; // 30 BGSPreviewTransform previewTransform; // 50 BGSSoundTagComponent soundTagComponent; // 60 }; static_assert(sizeof(TESBoundObject) == 0x68); }