#pragma once #include "RE/B/BSIntrusiveRefCounted.h" #include "RE/B/BSTArray.h" #include "RE/B/BSTEvent.h" #include "RE/B/BSTSingleton.h" #include "RE/C/CurrentRadiationSourceCount.h" #include "RE/C/CurrentRadsDisplayMagnitude.h" #include "RE/C/CurrentRadsPercentOfLethal.h" #include "RE/H/HUDModes.h" #include "RE/N/NiPointer.h" #include "RE/P/PipboyLightEvent.h" #include "RE/P/PlayerAmmoCountEvent.h" #include "RE/P/PlayerWeaponReloadEvent.h" #include "RE/S/SimpleAnimationGraphManagerHolder.h" namespace RE { class NiAVObject; class NiNode; namespace ExitPowerArmor { class Event; } namespace PreloadPowerArmor { class Event; } class __declspec(novtable) PowerArmorGeometry : public SimpleAnimationGraphManagerHolder, // 00 public BSTEventSink, // 18 public BSTEventSink, // 20 public BSIntrusiveRefCounted, // 28 public BSTSingletonSDM // 2C { public: static constexpr auto RTTI{ RTTI::PowerArmorGeometry }; static constexpr auto VTABLE{ VTABLE::PowerArmorGeometry }; virtual ~PowerArmorGeometry(); // 00 // override virtual void BackgroundTaskFinishedLoading() override; // 01 virtual BSEventNotifyControl ProcessEvent(const PreloadPowerArmor::Event& a_event, BSTEventSource* a_source) override; // 02 virtual BSEventNotifyControl ProcessEvent(const ExitPowerArmor::Event& a_event, BSTEventSource* a_source) override; // 03 [[nodiscard]] static PowerArmorGeometry* GetSingleton() { static REL::Relocation singleton{ ID::PowerArmorGeometry::Singleton }; return *singleton; } void HidePipboyPAGeometry() { using func_t = decltype(&PowerArmorGeometry::HidePipboyPAGeometry); static REL::Relocation func{ ID::PowerArmorGeometry::HidePipboyPAGeometry }; return func(this); } void ShowPipboyPAGeometry() { using func_t = decltype(&PowerArmorGeometry::ShowPipboyPAGeometry); static REL::Relocation func{ ID::PowerArmorGeometry::ShowPipboyPAGeometry }; return func(this); } // members BSTValueEventSink pipboySpotLightEvent; // 030 BSTValueEventSink nextAmmoCount; // 048 BSTValueEventSink playerReloaded; // 068 BSTValueEventSink radsCount; // 080 BSTValueEventSink radsPercentOfLethal; // 0A0 BSTValueEventSink radiationSourceCount; // 0C0 TESImageSpaceModifier* paPipboyEffect; // 0E0 NiPointer paDashDials; // 0E8 NiPointer pipboyPAGlass; // 0F0 NiAVObject* paDashLightSpot; // 0F8 NiAVObject* paDashLightScope; // 100 NiAVObject* paDashLightAux; // 108 NiAVObject* paDash; // 110 NiAVObject* plane; // 118 NiAVObject* compass; // 120 BSTArray queued3D; // 128 HUDModes validHUDModes; // 140 float radiationSmoother; // 160 NiPointer dbHUDRain; // 168 bool hudRain; // 170 bool prevShouldBeVisible; // 171 bool powerArmorEmergencyLightOn; // 172 bool queueInit; // 173 bool prevIsFirstPerson; // 174 bool ammoDirty; // 175 bool initialized; // 176 }; static_assert(sizeof(PowerArmorGeometry) == 0x178); }