CommonLibSSE NG
RaceSexMenu.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "RE/B/BSTArray.h"
4 #include "RE/I/IMenu.h"
6 #include "RE/R/RaceSexCamera.h"
7 #include "RE/S/Sexes.h"
8 
9 namespace RE
10 {
11  // menuDepth = 3
12  // flags = kPausesGame | kUsesMenuContext | kRequiresUpdate | kTopmostRenderedMenu | kUpdateUsesCursor
13  // context = kItemMenu
14  class RaceSexMenu :
15 #ifndef SKYRIM_CROSS_VR
16  public IMenu, // 00
17  public MenuEventHandler // 30, 40
18 #else
19  public IMenu // 00
20 #endif
21  {
22  public:
23  inline static constexpr auto RTTI = RTTI_RaceSexMenu;
24  constexpr static std::string_view MENU_NAME = "RaceSex Menu";
25 
26  struct RUNTIME_DATA
27  {
28 #define RUNTIME_DATA_CONTENT \
29  BSTArray<void*> unk040[7]; /* 000 */ \
30  RaceSexCamera camera; /* 0A8 */ \
31  BSTArray<void*> unk140[2]; /* 100 */ \
32  BSTArray<void*> unk170; /* 130 */ \
33  std::uint64_t unk188; /* 148 */ \
34  std::uint32_t unk190; /* 150 */ \
35  std::uint32_t unk194; /* 154 */ \
36  stl::enumeration<SEX, std::uint32_t> sex; /* 158 */ \
37  std::uint16_t unk19C; /* 15C */ \
38  std::uint8_t unk19E; /* 15E */ \
39  std::uint8_t pad19F; /* 15F */ \
40  std::uint8_t unk1A0; /* 160 */ \
41  std::uint8_t unk1A1; /* 161 */ \
42  std::uint16_t unk1A2; /* 162 */ \
43  std::uint32_t unk1A4; /* 164 */
44 
46  };
47  static_assert(sizeof(RUNTIME_DATA) == 0x168);
48 
49  ~RaceSexMenu() override; // 00
50 
51  // override (IMenu)
52  void Accept(CallbackProcessor* a_processor) override; // 01
53  void PostCreate() override; // 02
54  UI_MESSAGE_RESULTS ProcessMessage(UIMessage& a_message) override; // 04
55  void AdvanceMovie(float a_interval, std::uint32_t a_currentTime) override; // 05
56 
57  // override (MenuEventHandler)
58 #ifndef SKYRIM_CROSS_VR
59  bool CanProcess(InputEvent* a_event) override; // 01
60  bool ProcessThumbstick(ThumbstickEvent* a_event) override; // 03
61  bool ProcessMouseMove(MouseMoveEvent* a_event) override; // 04
62  bool ProcessButton(ButtonEvent* a_event) override; // 05
63 #endif
64 
65  [[nodiscard]] MenuEventHandler* AsMenuEventHandler() noexcept
66  {
67  return &REL::RelocateMember<MenuEventHandler>(this, 0x30, 0x40);
68  }
69 
70  [[nodiscard]] const MenuEventHandler* AsMenuEventHandler() const noexcept
71  {
72  return const_cast<RaceSexMenu*>(this)->AsMenuEventHandler();
73  }
74 
75  [[nodiscard]] inline RUNTIME_DATA& GetRuntimeData() noexcept
76  {
77  return REL::RelocateMember<RUNTIME_DATA>(this, 0x40, 0x50);
78  }
79 
80  [[nodiscard]] inline const RUNTIME_DATA& GetRuntimeData() const noexcept
81  {
82  return REL::RelocateMember<RUNTIME_DATA>(this, 0x40, 0x50);
83  }
84 
85  void ChangeName(const char* a_name);
86 
87  // members
88 #ifndef SKYRIM_CROSS_VR
89  RUNTIME_DATA_CONTENT // 40, 50
90 #endif
91  };
92 #ifndef ENABLE_SKYRIM_VR
93  static_assert(sizeof(RaceSexMenu) == 0x1A8);
94 #elif !defined(ENABLE_SKYRIM_AE) && !defined(ENABLE_SKYRIM_SE)
95  static_assert(sizeof(RaceSexMenu) == 0x1B8);
96 #endif
97 }
98 #undef RUNTIME_DATA_CONTENT
#define RUNTIME_DATA_CONTENT
Definition: RaceSexMenu.h:28
Definition: ButtonEvent.h:11
Definition: FxDelegateHandler.h:19
Definition: IMenu.h:55
Definition: InputEvent.h:25
Definition: MenuEventHandler.h:14
Definition: MouseMoveEvent.h:8
Definition: RaceSexMenu.h:21
~RaceSexMenu() override
void PostCreate() override
bool ProcessMouseMove(MouseMoveEvent *a_event) override
bool CanProcess(InputEvent *a_event) override
UI_MESSAGE_RESULTS ProcessMessage(UIMessage &a_message) override
bool ProcessButton(ButtonEvent *a_event) override
MenuEventHandler * AsMenuEventHandler() noexcept
Definition: RaceSexMenu.h:65
constexpr static std::string_view MENU_NAME
Definition: RaceSexMenu.h:24
static constexpr auto RTTI
Definition: RaceSexMenu.h:23
const RUNTIME_DATA & GetRuntimeData() const noexcept
Definition: RaceSexMenu.h:80
bool ProcessThumbstick(ThumbstickEvent *a_event) override
void AdvanceMovie(float a_interval, std::uint32_t a_currentTime) override
void ChangeName(const char *a_name)
RUNTIME_DATA & GetRuntimeData() noexcept
Definition: RaceSexMenu.h:75
const MenuEventHandler * AsMenuEventHandler() const noexcept
Definition: RaceSexMenu.h:70
void Accept(CallbackProcessor *a_processor) override
Definition: ThumbstickEvent.h:8
Definition: UIMessage.h:28
Definition: AbsorbEffect.h:6
constexpr REL::VariantID RTTI_RaceSexMenu(688899, 396754, 0x1f47630)
UI_MESSAGE_RESULTS
Definition: IMenu.h:48
Definition: RaceSexMenu.h:27