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

125 lines
5.5 KiB
C++

#pragma once
#include "RE/B/BGSInventoryList.h"
#include "RE/B/BGSTypedFormValuePair.h"
#include "RE/B/BSPointerHandle.h"
#include "RE/B/BSTSmartPointer.h"
#include "RE/B/BSTTuple.h"
#include "RE/G/GameMenuBase.h"
#include "RE/I/Inventory3DManager.h"
#include "RE/I/InventoryInterface.h"
#include "RE/N/NiPointer.h"
#include "RE/R/Rumble.h"
namespace RE
{
class ExtraDataList;
class NiNode;
class __declspec(novtable) WorkbenchMenuBase :
public GameMenuBase // 00
{
public:
static constexpr auto RTTI{ RTTI::WorkbenchMenuBase };
static constexpr auto VTABLE{ VTABLE::WorkbenchMenuBase };
enum class HighlightMode
{
kModMenu,
kAll,
kWorld
};
class InitParams
{
public:
InitParams();
// members
ObjectRefHandle workbenchFurniture; // 00
ObjectRefHandle inventorySource; // 04
InventoryInterface::Handle item{ 0xFFFFFFFF }; // 08
NiPointer<Actor> actor{ nullptr }; // 10
std::uint32_t stack{ 0 }; // 18
bool inspectMode{ true }; // 1C
bool inspectingSingleItem{ false }; // 1D
bool inspectingFeaturedItem{ false }; // 1E
bool showFeaturedItemMessage{ false }; // 1F
bool botCompanion{ false }; // 20
};
static_assert(sizeof(InitParams) == 0x28);
class ModChoiceData
{
public:
// members
union
{
BGSMod::Attachment::Mod* mod;
TESBoundObject* object;
}; // 00
const BGSConstructibleObject* recipe; // 08
BSTArray<BSTTuple<TESForm*, BGSTypedFormValuePair::SharedVal>>* requiredItems; // 10
BSTArray<BSTTuple<BGSPerk*, std::uint32_t>> requiredPerks; // 18
std::uint8_t rank; // 30
std::uint8_t index; // 31
};
static_assert(sizeof(ModChoiceData) == 0x38);
virtual ~WorkbenchMenuBase(); // 00
// override (GameMenuBase)
virtual void Call(const Params&) override; // 01
virtual void MapCodeObjectFunctions() override; // 02
virtual void PreDisplay() override; // 05
virtual void OnMenuStackChanged(const BSFixedString& a_topMenuName, bool a_passesTopMenuTest) override; // 09
// override (BSInputEventUser)
virtual bool ShouldHandleEvent(const InputEvent*) override; // 01
virtual void OnThumbstickEvent(const ThumbstickEvent*) override; // 04
virtual void OnCursorMoveEvent(const CursorMoveEvent*) override; // 05
virtual void OnButtonEvent(const ButtonEvent*) override; // 08
// add
virtual void OnHideMenu(); // 14
virtual void UpdateMenu(); // 15
virtual void BuildCanceled(); // 16
virtual void BuildConfirmed(bool a_ownerIsWorkbench) = 0; // 17
virtual bool GetWorkbenchHasInventory(); // 18
virtual const ModChoiceData* QCurrentModChoiceData(); // 19
virtual void ShowBuildFailureMessage(); // 1A
virtual bool TryCreate() = 0; // 1B
void UpdateOptimizedAutoBuildInv()
{
using func_t = decltype(&WorkbenchMenuBase::UpdateOptimizedAutoBuildInv);
static REL::Relocation<func_t> func{ ID::WorkbenchMenuBase::UpdateOptimizedAutoBuildInv };
return func(this);
}
// members
NiPointer<TESObjectREFR> sharedContainerRef; // 0E0
NiPointer<TESObjectREFR> workbenchContainerRef; // 0E8
BSTArray<NiPointer<TESObjectREFR>> sharedContainers; // 0F0
Inventory3DManager inv3DModelManager; // 110
BGSInventoryList optimizedAutoBuildInv; // 250
BSTArray<ModChoiceData> modChoiceArray; // 2D0
std::uint32_t modChoiceIndex; // 2E8
std::uint32_t lastModChoiceIndex; // 2EC
bool repairing; // 2F0
bool queueHide; // 2F1
bool hiding; // 2F2
bool VATSWasEnabled; // 2F3
NiPointer<TESObjectREFR> workbenchRef; // 2F8
BSTSmartPointer<ExtraDataList> recipeExtraDataList; // 300
NiPointer<NiNode> item3DGeometry; // 308
BSTArray<TESForm*> queuedCraftingComponents; // 310
std::uint64_t soundTimer; // 328
REX::TEnumSet<HighlightMode, std::uint32_t> highlightMode; // 330
Rumble::AutoRumblePause autoRumblePause; // 334
bool initialized; // 335
bool soundsQueued; // 336
};
static_assert(sizeof(WorkbenchMenuBase) == 0x340);
}