CommonLibSSE NG
CreationClubMenu.h
Go to the documentation of this file.
1 #pragma once
2 
4 #include "RE/B/BSTEvent.h"
6 #include "RE/I/IMenu.h"
8 
9 namespace RE
10 {
11  class MenuOpenCloseEvent;
12 
13  // menuDepth = 0
14  // flags = kUsesMenuContext | kDisablePauseMenu | kUpdateUsesCursor | kInventoryItemMenu | kDontHideCursorWhenTopmost
15  // context = kItemMenu
17 #ifndef SKYRIM_CROSS_VR
18  public IMenu, // 00
19  public MenuEventHandler, // 30
20  public GFxFunctionHandler, // 40
21  public BSTEventSink<MenuOpenCloseEvent> // 50
22 #else
23  public IMenu // 00
24 #endif
25  {
26  public:
27  inline static constexpr auto RTTI = RTTI_CreationClubMenu;
28  constexpr static std::string_view MENU_NAME = "Creation Club Menu";
29 
30  struct RUNTIME_DATA
31  {
32 #define RUNTIME_DATA_CONTENT \
33  BSScaleformExternalTexture background; /* 00 */ \
34  BSScaleformExternalTexture details; /* 18 */
35 
37  };
38  static_assert(sizeof(RUNTIME_DATA) == 0x30);
39 
40  ~CreationClubMenu() override; // 00
41 
42  // override (IMenu)
43  void AdvanceMovie(float a_interval, std::uint32_t a_currentTime) override; // 05
44 
45 #ifndef SKYRIM_CROSS_VR
46  // override (MenuEventHandler)
47  bool CanProcess(InputEvent* a_event) override; // 01
48  bool ProcessThumbstick(ThumbstickEvent* a_event) override; // 03
49 
50  // override (GFxFunctionHandler)
51  void Call(Params& a_params) override; // 01
52 
53  // override (BSTEventSink<MenuOpenCloseEvent>)
55 #endif
56 
57  [[nodiscard]] MenuEventHandler* AsMenuEventHandler() noexcept
58  {
59  return &REL::RelocateMember<MenuEventHandler>(this, 0x30, 0x40);
60  }
61 
62  [[nodiscard]] const MenuEventHandler* AsMenuEventHandler() const noexcept
63  {
64  return const_cast<CreationClubMenu*>(this)->AsMenuEventHandler();
65  }
66 
67  [[nodiscard]] GFxFunctionHandler* AsGFxFunctionHandler() noexcept
68  {
69  return &REL::RelocateMember<GFxFunctionHandler>(this, 0x40, 0x50);
70  }
71 
72  [[nodiscard]] const GFxFunctionHandler* AsGFxFunctionHandler() const noexcept
73  {
74  return const_cast<CreationClubMenu*>(this)->AsGFxFunctionHandler();
75  }
76 
78  {
79  return &REL::RelocateMember<BSTEventSink<MenuOpenCloseEvent>>(this, 0x50, 0x60);
80  }
81 
82  [[nodiscard]] const BSTEventSink<MenuOpenCloseEvent>* AsMenuOpenCloseEventSink() const noexcept
83  {
84  return const_cast<CreationClubMenu*>(this)->AsMenuOpenCloseEventSink();
85  }
86 
87  [[nodiscard]] inline RUNTIME_DATA& GetRuntimeData() noexcept
88  {
89  return REL::RelocateMember<RUNTIME_DATA>(this, 0x58, 0x68);
90  }
91 
92  [[nodiscard]] inline const RUNTIME_DATA& GetRuntimeData() const noexcept
93  {
94  return REL::RelocateMember<RUNTIME_DATA>(this, 0x58, 0x68);
95  }
96 
97  // members
98 #ifndef SKYRIM_CROSS_VR
99  RUNTIME_DATA_CONTENT // 58, 68
100 #endif
101  };
102 #ifndef ENABLE_SKYRIM_VR
103  static_assert(sizeof(CreationClubMenu) == 0x88);
104 #elif !defined(ENABLE_SKYRIM_AE) && !defined(ENABLE_SKYRIM_SE)
105  static_assert(sizeof(CreationClubMenu) == 0x98);
106 #endif
107 }
108 #undef RUNTIME_DATA_CONTENT
#define RUNTIME_DATA_CONTENT
Definition: CreationClubMenu.h:32
Definition: BSTEvent.h:143
Definition: CreationClubMenu.h:25
BSEventNotifyControl ProcessEvent(const MenuOpenCloseEvent *a_event, BSTEventSource< MenuOpenCloseEvent > *a_eventSource) override
const GFxFunctionHandler * AsGFxFunctionHandler() const noexcept
Definition: CreationClubMenu.h:72
static constexpr auto RTTI
Definition: CreationClubMenu.h:27
const RUNTIME_DATA & GetRuntimeData() const noexcept
Definition: CreationClubMenu.h:92
bool ProcessThumbstick(ThumbstickEvent *a_event) override
BSTEventSink< MenuOpenCloseEvent > * AsMenuOpenCloseEventSink() noexcept
Definition: CreationClubMenu.h:77
bool CanProcess(InputEvent *a_event) override
~CreationClubMenu() override
const MenuEventHandler * AsMenuEventHandler() const noexcept
Definition: CreationClubMenu.h:62
RUNTIME_DATA & GetRuntimeData() noexcept
Definition: CreationClubMenu.h:87
void Call(Params &a_params) override
GFxFunctionHandler * AsGFxFunctionHandler() noexcept
Definition: CreationClubMenu.h:67
void AdvanceMovie(float a_interval, std::uint32_t a_currentTime) override
MenuEventHandler * AsMenuEventHandler() noexcept
Definition: CreationClubMenu.h:57
constexpr static std::string_view MENU_NAME
Definition: CreationClubMenu.h:28
const BSTEventSink< MenuOpenCloseEvent > * AsMenuOpenCloseEventSink() const noexcept
Definition: CreationClubMenu.h:82
Definition: GFxFunctionHandler.h:12
Definition: IMenu.h:55
Definition: InputEvent.h:25
Definition: MenuEventHandler.h:14
Definition: MenuOpenCloseEvent.h:8
Definition: ThumbstickEvent.h:8
Definition: AbsorbEffect.h:6
constexpr REL::VariantID RTTI_CreationClubMenu(686415, 394235, 0x0)
BSEventNotifyControl
Definition: BSTEvent.h:12
Definition: CreationClubMenu.h:31
Definition: GFxFunctionHandler.h:17