#pragma once #include "RE/B/BSGFxShaderFXTarget.h" #include "RE/B/BSSpinLock.h" #include "RE/B/BSTArray.h" #include "RE/B/BSTOptional.h" #include "RE/B/ButtonHintBar.h" #include "RE/H/HUDModeType.h" #include "RE/I/IMenu.h" #include "RE/S/SendHUDMessage.h" namespace RE { class GameMenuBase : public IMenu // 00 { public: static constexpr auto RTTI{ RTTI::GameMenuBase }; static constexpr auto VTABLE{ VTABLE::GameMenuBase }; GameMenuBase() { customRendererName = "FlatScreenModel"; } virtual ~GameMenuBase() = default; // override virtual void SetIsTopButtonBar(bool a_isTopButtonBar) override // 08 { using func_t = decltype(&GameMenuBase::SetIsTopButtonBar); static REL::Relocation func{ ID::GameMenuBase::SetIsTopButtonBar }; return func(this, a_isTopButtonBar); } virtual void OnMenuDisplayStateChanged() override // 0A { using func_t = decltype(&GameMenuBase::OnMenuDisplayStateChanged); static REL::Relocation func{ ID::GameMenuBase::OnMenuDisplayStateChanged }; return func(this); } virtual void OnAddedToMenuStack() override // 0B { IMenu::OnAddedToMenuStack(); if (this->menuHUDMode.has_value()) { SendHUDMessage::PushHUDMode(this->menuHUDMode.value()); } } virtual void OnRemovedFromMenuStack() override // 0C { IMenu::OnRemovedFromMenuStack(); if (this->menuHUDMode.has_value()) { SendHUDMessage::PopHUDMode(this->menuHUDMode.value()); } } virtual bool CacheShaderFXQuadsForRenderer_Impl() override // 10 { using func_t = decltype(&GameMenuBase::CacheShaderFXQuadsForRenderer_Impl); static REL::Relocation func{ ID::GameMenuBase::CacheShaderFXQuadsForRenderer_Impl }; return func(this); } virtual void TransferCachedShaderFXQuadsForRenderer(const BSFixedString& a_rendererName) override // 11 { using func_t = decltype(&GameMenuBase::TransferCachedShaderFXQuadsForRenderer); static REL::Relocation func{ ID::GameMenuBase::TransferCachedShaderFXQuadsForRenderer }; return func(this, a_rendererName); } virtual void SetViewportRect(const NiRect& a_viewportRect) override // 12 { using func_t = decltype(&GameMenuBase::SetViewportRect); static REL::Relocation func{ ID::GameMenuBase::SetViewportRect }; return func(this, a_viewportRect); } // add virtual void AppendShaderFXInfos(BSTAlignedArray& a_colorFXInfos, BSTAlignedArray& a_backgroundFXInfos) const // 13 { using func_t = decltype(&GameMenuBase::AppendShaderFXInfos); static REL::Relocation func{ ID::GameMenuBase::AppendShaderFXInfos }; return func(this, a_colorFXInfos, a_backgroundFXInfos); } void SetUpButtonBar(BSGFxShaderFXTarget& a_parentObject, const char* a_buttonBarPath, HUDColorTypes a_colorType) { using func_t = decltype(&GameMenuBase::SetUpButtonBar); static REL::Relocation func{ ID::GameMenuBase::SetUpButtonBar }; func(this, a_parentObject, a_buttonBarPath, a_colorType); } // members BSTArray shaderFXObjects; // 70 std::unique_ptr filterHolder; // 88 std::unique_ptr buttonHintBar; // 90 BSTAlignedArray cachedColorFXInfos; // 98 BSTAlignedArray cachedBackgroundFXInfos; // B0 BSReadWriteLock cachedQuadsLock; // C8 BSTOptional menuHUDMode{ std::nullopt }; // D0 }; static_assert(sizeof(GameMenuBase) == 0xE0); }