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

263 lines
9.2 KiB
C++

#pragma once
#include "RE/B/BSFixedString.h"
#include "RE/B/BSInputEventUser.h"
#include "RE/B/BSPointerHandle.h"
#include "RE/B/BSSoundHandle.h"
#include "RE/B/BSTEvent.h"
#include "RE/B/BSTPoint.h"
#include "RE/B/BSTSingleton.h"
#include "RE/I/Inventory3DManager.h"
#include "RE/I/InventoryInterface.h"
#include "RE/I/IsPipboyActiveEvent.h"
#include "RE/N/NiPointer.h"
#include "RE/N/NiRect.h"
#include "RE/P/PipboyRadioController.h"
namespace RE
{
class BSTriShape;
class IMenu;
class BSAnimationGraphEvent;
class __declspec(novtable) PipboyManager :
public BSTEventSink<BSAnimationGraphEvent>, // 00
public BSInputEventUser, // 08
public BSTSingletonSDM<PipboyManager> // 18
{
public:
static constexpr auto RTTI{ RTTI::PipboyManager };
static constexpr auto VTABLE{ VTABLE::PipboyManager };
enum class LOWER_REASON
{
kNone = 0x0,
kBook = 0x1,
kPerkGrid = 0x2,
kInspect = 0x3
};
enum class PipboyScreenEffectTriggerType
{
kPipboyOpen = 0x0,
kTabChange = 0x1,
kCategoryChange = 0x2,
kSmallTransition = 0x3,
kMapChange = 0x4
};
virtual ~PipboyManager(); // 00
// override
virtual BSEventNotifyControl ProcessEvent(const BSAnimationGraphEvent& a_event, BSTEventSource<BSAnimationGraphEvent>* a_source) override; // 01
virtual bool ShouldHandleEvent(const InputEvent*) override; // 02
virtual void OnButtonEvent(const ButtonEvent*) override; // 09
virtual void OnMouseMoveEvent(const MouseMoveEvent*) override; // 07
virtual void OnThumbstickEvent(const ThumbstickEvent*) override; // 05
[[nodiscard]] static PipboyManager* GetSingleton()
{
static REL::Relocation<PipboyManager**> singleton{ ID::PipboyManager::Singleton };
return *singleton;
}
void AddMenuToPipboy(IMenu& a_menu, const NiRect<float>& a_standVP, const NiRect<float>& a_powerVP)
{
using func_t = decltype(&PipboyManager::AddMenuToPipboy);
static REL::Relocation<func_t> func{ ID::PipboyManager::AddMenuToPipboy };
func(this, a_menu, a_standVP, a_powerVP);
}
void ClosedownPipboy()
{
using func_t = decltype(&PipboyManager::ClosedownPipboy);
static REL::Relocation<func_t> func{ ID::PipboyManager::ClosedownPipboy };
func(this);
}
void EnablePipboyShader()
{
using func_t = decltype(&PipboyManager::EnablePipboyShader);
static REL::Relocation<func_t> func{ ID::PipboyManager::EnablePipboyShader };
func(this);
}
void InitPipboy()
{
using func_t = decltype(&PipboyManager::InitPipboy);
static REL::Relocation<func_t> func{ ID::PipboyManager::InitPipboy };
func(this);
}
void LowerPipboy(LOWER_REASON a_reason)
{
using func_t = decltype(&PipboyManager::LowerPipboy);
static REL::Relocation<func_t> func{ ID::PipboyManager::LowerPipboy };
func(this, a_reason);
}
void OnPipboyCloseAnim()
{
using func_t = decltype(&PipboyManager::OnPipboyCloseAnim);
static REL::Relocation<func_t> func{ ID::PipboyManager::OnPipboyCloseAnim };
func(this);
}
void OnPipboyCloseAnimFailed()
{
using func_t = decltype(&PipboyManager::OnPipboyCloseAnimFailed);
static REL::Relocation<func_t> func{ ID::PipboyManager::OnPipboyCloseAnimFailed };
func(this);
}
void OnPipboyClosed()
{
using func_t = decltype(&PipboyManager::OnPipboyClosed);
static REL::Relocation<func_t> func{ ID::PipboyManager::OnPipboyClosed };
func(this);
}
void OnPipboyOpenAnim()
{
using func_t = decltype(&PipboyManager::OnPipboyOpenAnim);
static REL::Relocation<func_t> func{ ID::PipboyManager::OnPipboyOpenAnim };
func(this);
}
void OnPipboyOpenAnimFailed()
{
using func_t = decltype(&PipboyManager::OnPipboyOpenAnimFailed);
static REL::Relocation<func_t> func{ ID::PipboyManager::OnPipboyOpenAnimFailed };
func(this);
}
void OnPipboyOpened()
{
using func_t = decltype(&PipboyManager::OnPipboyOpened);
static REL::Relocation<func_t> func{ ID::PipboyManager::OnPipboyOpened };
func(this);
}
void PlayItemAnimOnClose()
{
using func_t = decltype(&PipboyManager::PlayItemAnimOnClose);
static REL::Relocation<func_t> func{ ID::PipboyManager::PlayItemAnimOnClose };
func(this);
}
void PlayPipboyCloseAnim(bool a_noAnim)
{
using func_t = decltype(&PipboyManager::PlayPipboyCloseAnim);
static REL::Relocation<func_t> func{ ID::PipboyManager::PlayPipboyCloseAnim };
func(this, a_noAnim);
}
void PlayPipboyGenericOpenAnim(const BSFixedString& a_menu, const BSFixedString& a_anim, bool a_noAnim)
{
using func_t = decltype(&PipboyManager::PlayPipboyGenericOpenAnim);
static REL::Relocation<func_t> func{ ID::PipboyManager::PlayPipboyGenericOpenAnim };
func(this, a_menu, a_anim, a_noAnim);
}
void PlayPipboyLoadHolotapeAnim(BGSNote* a_holotape, bool a_noAnim)
{
using func_t = decltype(&PipboyManager::PlayPipboyLoadHolotapeAnim);
static REL::Relocation<func_t> func{ ID::PipboyManager::PlayPipboyLoadHolotapeAnim };
func(this, a_holotape, a_noAnim);
}
void PlayPipboyOpenAnim(const BSFixedString& a_menuName)
{
using func_t = decltype(&PipboyManager::PlayPipboyOpenAnim);
static REL::Relocation<func_t> func{ ID::PipboyManager::PlayPipboyOpenAnim };
func(this, a_menuName);
}
void PlayPipboyOpenTerminalAnim(BGSTerminal* a_terminal)
{
using func_t = decltype(&PipboyManager::PlayPipboyOpenTerminalAnim);
static REL::Relocation<func_t> func{ ID::PipboyManager::PlayPipboyOpenTerminalAnim };
func(this, a_terminal);
}
void ProcessLoweringReason()
{
using func_t = decltype(&PipboyManager::ProcessLoweringReason);
static REL::Relocation<func_t> func{ ID::PipboyManager::ProcessLoweringReason };
func(this);
}
bool QPipboyActive()
{
using func_t = decltype(&PipboyManager::QPipboyActive);
static REL::Relocation<func_t> func{ ID::PipboyManager::QPipboyActive };
return func(this);
}
void RaisePipboy()
{
using func_t = decltype(&PipboyManager::RaisePipboy);
static REL::Relocation<func_t> func{ ID::PipboyManager::RaisePipboy };
func(this);
}
void RefreshPipboyRenderSurface()
{
using func_t = decltype(&PipboyManager::RefreshPipboyRenderSurface);
static REL::Relocation<func_t> func{ ID::PipboyManager::RefreshPipboyRenderSurface };
func(this);
}
void StartAnimationGraphListening()
{
using func_t = decltype(&PipboyManager::StartAnimationGraphListening);
static REL::Relocation<func_t> func{ ID::PipboyManager::StartAnimationGraphListening };
func(this);
}
void StopAnimationGraphListening()
{
using func_t = decltype(&PipboyManager::StopAnimationGraphListening);
static REL::Relocation<func_t> func{ ID::PipboyManager::StopAnimationGraphListening };
func(this);
}
void UpdateCursorConstraint(bool a_enable)
{
using func_t = decltype(&PipboyManager::UpdateCursorConstraint);
static REL::Relocation<func_t> func{ ID::PipboyManager::UpdateCursorConstraint };
func(this, a_enable);
}
// members
BSSoundHandle pipboyHumSound; // 01C
BSTPoint2<float> inputVector; // 024
BSTPoint2<float> newInput; // 02C
NiPointer<BSTriShape> debugModeGeom; // 038
Inventory3DManager inv3DModelManager; // 040
BGSNote* holotapeToLoad; // 180
BGSTerminal* terminalToLoad; // 188
BSFixedString menuToOpen; // 190
BSFixedString openAnimEvent; // 198
BSFixedString closeAnimEvent; // 1A0
REX::TEnumSet<LOWER_REASON, std::int32_t> loweringReason; // 1A8
PipboyRadioController radioController; // 1AC
TESBoundObject* itemAnimOnClose; // 1B0
ObjectRefHandle fastTravelLocation; // 1B8
InventoryInterface::Handle inspectRequestItem; // 1BC
std::uint32_t inspectRequestStack; // 1C0
bool pipboyExamineMode; // 1C4
bool pipboyExamineDirtyFlag; // 1C5
bool pipboyOpening; // 1C6
bool pipboyClosing; // 1C7
BSTValueEventSource<IsPipboyActiveEvent> pipboyActive; // 1C8
bool ignoreOpeningFlag; // 1E0
bool autoSaveOnClose; // 1E1
bool pipboyMenuCloseQueued; // 1E2
bool pipboyRaising; // 1E3
bool wasMotionBlurActive; // 1E4
bool wasPipboyLightActive; // 1E5
};
static_assert(sizeof(PipboyManager) == 0x1F0);
}