CommonLibSSE NG
ControlMap.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include "RE/B/BSFixedString.h"
4 #include "RE/B/BSInputDevice.h"
5 #include "RE/B/BSTArray.h"
6 #include "RE/B/BSTEvent.h"
7 #include "RE/B/BSTSingleton.h"
8 #include "RE/I/InputDevices.h"
9 #include "RE/P/PCGamepadType.h"
10 #include "RE/U/UserEvents.h"
11 
12 namespace RE
13 {
14  class UserEventEnabled;
15 
16  class ControlMap :
17  public BSTSingletonSDM<ControlMap>, // 00
18  public BSTEventSource<UserEventEnabled> // 08
19  {
20  public:
23 
24  enum : std::uint32_t
25  {
26  kInvalid = static_cast<std::uint8_t>(-1)
27  };
28 
30  {
31  public:
32  // members
34  std::uint16_t inputKey; // 08
35  std::uint16_t modifier; // 08
36  std::int8_t indexInContext; // 0C
37  bool remappable; // 0D
38  bool linked; // 0E
40  std::uint32_t pad14; // 14
41  };
42  static_assert(sizeof(UserEventMapping) == 0x18);
43 
44  struct InputContext
45  {
46  public:
47  [[nodiscard]] static SKYRIM_REL_VR std::size_t GetNumDeviceMappings() noexcept
48  {
49 #ifndef SKYRIM_CROSS_VR
50  return INPUT_DEVICES::kTotal;
51 #else
53  return INPUT_DEVICES::kTotal;
54  } else {
55  return static_cast<std::size_t>(INPUT_DEVICES::kVirtualKeyboard) + 1;
56  }
57 #endif
58  }
59 
60  // members
61  BSTArray<UserEventMapping> deviceMappings[INPUT_DEVICES::kTotal]; // 00
62  };
63 #ifdef ENABLE_SKYRIM_VR
64  static_assert(sizeof(InputContext) == 0xA8);
65 #else
66  static_assert(sizeof(InputContext) == 0x60);
67 #endif
68 
70  {
71  public:
72  // members
77  std::uint32_t pad14; // 14
79  };
80  static_assert(sizeof(LinkedMapping) == 0x20);
81 
83 
84  std::int8_t AllowTextInput(bool a_allow);
85  constexpr bool AreControlsEnabled(UEFlag a_flags) const noexcept { return enabledControls.all(a_flags); }
86  std::uint32_t GetMappedKey(std::string_view a_eventID, INPUT_DEVICE a_device, InputContextID a_context = InputContextID::kGameplay) const;
87  std::string_view GetUserEventName(std::uint32_t a_buttonID, INPUT_DEVICE a_device, InputContextID a_context = InputContextID::kGameplay) const;
88  constexpr PC_GAMEPAD_TYPE GetGamePadType() const noexcept { return gamePadMapType.get(); }
89  constexpr bool IsActivateControlsEnabled() const noexcept { return enabledControls.all(UEFlag::kActivate); }
90  constexpr bool IsConsoleControlsEnabled() const noexcept { return enabledControls.all(UEFlag::kConsole); }
91  constexpr bool IsFightingControlsEnabled() const noexcept { return enabledControls.all(UEFlag::kFighting); }
92  constexpr bool IsLookingControlsEnabled() const noexcept { return enabledControls.all(UEFlag::kLooking); }
93  constexpr bool IsMenuControlsEnabled() const noexcept { return enabledControls.all(UEFlag::kMenu); }
94  constexpr bool IsMainFourControlsEnabled() const noexcept { return enabledControls.all(UEFlag::kMainFour); }
95  constexpr bool IsMovementControlsEnabled() const noexcept { return enabledControls.all(UEFlag::kMovement); }
96  constexpr bool IsPOVSwitchControlsEnabled() const noexcept { return enabledControls.all(UEFlag::kPOVSwitch); }
97  constexpr bool IsSneakingControlsEnabled() const noexcept { return enabledControls.all(UEFlag::kSneaking); }
98  constexpr bool IsVATSControlsEnabled() const noexcept { return enabledControls.all(UEFlag::kVATS); }
99  constexpr bool IsWheelZoomControlsEnabled() const noexcept { return enabledControls.all(UEFlag::kWheelZoom); }
102  void ToggleControls(UEFlag a_flags, bool a_enable);
103 
104  // members
105  InputContext* controlMap[InputContextID::kTotal]; // 060
110  std::int8_t textEntryCount; // 120
111  bool ignoreKeyboardMouse; // 121
113  std::uint8_t pad123; // 123
115  };
116 #ifdef SKYRIM_SUPPORT_AE
117  static_assert(sizeof(ControlMap) == 0x130);
118 #else
119  static_assert(sizeof(ControlMap) == 0x128);
120 #endif
121 }
#define SKYRIM_REL_VR
Definition: Common.h:76
#define SKYRIM_REL_VR_CONSTEXPR
Definition: Common.h:85
static SKYRIM_REL_VR bool IsVR() noexcept
Definition: Module.h:254
Definition: BSTArray.h:377
Definition: BSTEvent.h:19
Definition: ControlMap.h:19
constexpr PC_GAMEPAD_TYPE GetGamePadType() const noexcept
Definition: ControlMap.h:88
std::uint8_t pad123
Definition: ControlMap.h:113
constexpr bool IsFightingControlsEnabled() const noexcept
Definition: ControlMap.h:91
constexpr bool AreControlsEnabled(UEFlag a_flags) const noexcept
Definition: ControlMap.h:85
void ToggleControls(UEFlag a_flags, bool a_enable)
std::int8_t textEntryCount
Definition: ControlMap.h:110
std::int8_t AllowTextInput(bool a_allow)
constexpr bool IsSneakingControlsEnabled() const noexcept
Definition: ControlMap.h:97
constexpr bool IsConsoleControlsEnabled() const noexcept
Definition: ControlMap.h:90
bool ignoreActivateDisabledEvents
Definition: ControlMap.h:112
constexpr bool IsMovementControlsEnabled() const noexcept
Definition: ControlMap.h:95
stl::enumeration< PC_GAMEPAD_TYPE, std::uint32_t > gamePadMapType
Definition: ControlMap.h:114
constexpr bool IsMainFourControlsEnabled() const noexcept
Definition: ControlMap.h:94
std::string_view GetUserEventName(std::uint32_t a_buttonID, INPUT_DEVICE a_device, InputContextID a_context=InputContextID::kGameplay) const
std::uint32_t GetMappedKey(std::string_view a_eventID, INPUT_DEVICE a_device, InputContextID a_context=InputContextID::kGameplay) const
constexpr bool IsPOVSwitchControlsEnabled() const noexcept
Definition: ControlMap.h:96
constexpr bool IsActivateControlsEnabled() const noexcept
Definition: ControlMap.h:89
InputContext * controlMap[InputContextID::kTotal]
Definition: ControlMap.h:105
static ControlMap * GetSingleton()
stl::enumeration< UEFlag, std::uint32_t > enabledControls
Definition: ControlMap.h:108
constexpr bool IsMenuControlsEnabled() const noexcept
Definition: ControlMap.h:93
void PopInputContext(InputContextID a_context)
constexpr bool IsLookingControlsEnabled() const noexcept
Definition: ControlMap.h:92
constexpr bool IsWheelZoomControlsEnabled() const noexcept
Definition: ControlMap.h:99
bool ignoreKeyboardMouse
Definition: ControlMap.h:111
constexpr bool IsVATSControlsEnabled() const noexcept
Definition: ControlMap.h:98
BSTArray< LinkedMapping > linkedMappings
Definition: ControlMap.h:106
BSTArray< InputContextID > contextPriorityStack
Definition: ControlMap.h:107
void PushInputContext(InputContextID a_context)
@ kInvalid
Definition: ControlMap.h:26
stl::enumeration< UEFlag, std::uint32_t > unk11C
Definition: ControlMap.h:109
INPUT_CONTEXT_IDS::INPUT_CONTEXT_ID INPUT_CONTEXT_ID
Definition: UserEvents.h:41
USER_EVENT_FLAG
Definition: UserEvents.h:44
constexpr bool all(Args... a_args) const noexcept requires(std
Definition: PCH.h:295
constexpr enum_type get() const noexcept
Definition: PCH.h:268
Definition: AbsorbEffect.h:6
PC_GAMEPAD_TYPE
Definition: PCGamepadType.h:6
Definition: BSTSingleton.h:50
Definition: ControlMap.h:45
BSTArray< UserEventMapping > deviceMappings[INPUT_DEVICES::kTotal]
Definition: ControlMap.h:61
static SKYRIM_REL_VR std::size_t GetNumDeviceMappings() noexcept
Definition: ControlMap.h:47
Definition: ControlMap.h:70
std::uint32_t pad14
Definition: ControlMap.h:77
BSFixedString linkFromName
Definition: ControlMap.h:78
InputContextID linkedMappingContext
Definition: ControlMap.h:74
INPUT_DEVICE device
Definition: ControlMap.h:75
BSFixedString linkedMappingName
Definition: ControlMap.h:73
InputContextID linkFromContext
Definition: ControlMap.h:76
Definition: ControlMap.h:30
stl::enumeration< UEFlag, std::uint32_t > userEventGroupFlag
Definition: ControlMap.h:39
std::int8_t indexInContext
Definition: ControlMap.h:36
BSFixedString eventID
Definition: ControlMap.h:33
std::uint16_t modifier
Definition: ControlMap.h:35
std::uint16_t inputKey
Definition: ControlMap.h:34
bool linked
Definition: ControlMap.h:38
bool remappable
Definition: ControlMap.h:37
std::uint32_t pad14
Definition: ControlMap.h:40
INPUT_DEVICE
Definition: InputDevices.h:8
INPUT_CONTEXT_ID
Definition: UserEvents.h:14