ReXGlue SDK
Loading...
Searching...
No Matches
binding.h
Go to the documentation of this file.
1
11
12#pragma once
13
14#include <chrono>
15#include <memory>
16#include <optional>
17#include <span>
18#include <string>
19#include <string_view>
20#include <vector>
21
22#include <rex/input_keys.h>
23#include <rex/platform.h>
24#include <rex/result.h>
26#include <rex/types.h>
27
28namespace rex::hid {
29
30inline constexpr u8 kAxisDirections = 4;
31
32inline constexpr u8 kAxisKeysPerDirection = 2;
33
34inline constexpr u8 kMaxAxisKeyHalves = kAxisDirections * kAxisKeysPerDirection;
35
43constexpr u8 GetAxisSlot(u8 direction, u8 alternate) {
44 return static_cast<u8>(alternate * kAxisDirections + direction + 1);
45}
46
52constexpr u8 GetAxisDirection(u8 axis_slot) {
53 return static_cast<u8>((axis_slot - 1) % kAxisDirections);
54}
55
58 std::string_view name;
60 std::string_view defaults;
61 std::string_view description;
63 u32 group = 0;
65 PadAxes axes = PadAxes::kNone;
66};
67
76 public:
77 virtual ~IBindingSet() = default;
78
86 [[nodiscard]] virtual Result<void> Register(ISettingsRegistry& settings) = 0;
87
89 virtual void Unregister() = 0;
90
91 [[nodiscard]] virtual size_t GetCount() const = 0;
92
97 [[nodiscard]] virtual std::span<const InputSource> GetSources(size_t binding) const = 0;
98
107 virtual bool SetSource(size_t binding, size_t slot, const InputSource& source) = 0;
108
116 virtual bool SetSources(size_t binding, std::span<const InputSource> sources) = 0;
117
125 virtual bool Clear(size_t binding) = 0;
126
134 virtual bool Reset(size_t binding) = 0;
135
142 virtual bool ResetGroup(u32 group) = 0;
143
151 [[nodiscard]] virtual std::optional<size_t> FindConflict(size_t binding,
152 const InputSource& source) const = 0;
153
160 [[nodiscard]] virtual std::optional<size_t> FindBySetting(
161 std::string_view setting_name) const = 0;
162
164 [[nodiscard]] virtual u32 GetGeneration() const = 0;
165
170 [[nodiscard]] virtual std::vector<std::string> TakeParseErrors() = 0;
171};
172
177REX_HID_API std::span<const VirtualKey> GetBindableKeys();
178
182 std::chrono::milliseconds cancel_hold{800};
184 u32 pad_cancel_mask = (1u << static_cast<u32>(PadInput::kLeftTrigger)) |
185 (1u << static_cast<u32>(PadInput::kRightTrigger));
186};
187
194 public:
195 virtual ~IKeyCapture() = default;
196
202 virtual void SetPadButtons(u32 buttons) = 0;
203
205 virtual void Begin() = 0;
206
214 [[nodiscard]] virtual std::optional<InputSource> Poll(
215 std::chrono::steady_clock::time_point now = std::chrono::steady_clock::now()) = 0;
216
223 [[nodiscard]] virtual bool IsPending() const = 0;
224
230 [[nodiscard]] virtual bool WasCanceled() const = 0;
231};
232
233} // namespace rex::hid
constexpr u8 GetAxisSlot(u8 direction, u8 alternate)
Definition binding.h:43
constexpr u8 GetAxisDirection(u8 axis_slot)
Definition binding.h:52
REX_HID_API std::span< const VirtualKey > GetBindableKeys()
Definition settings_registry.h:38
Definition binding.h:75
virtual std::optional< size_t > FindBySetting(std::string_view setting_name) const =0
virtual void Unregister()=0
virtual bool Clear(size_t binding)=0
virtual bool Reset(size_t binding)=0
virtual bool ResetGroup(u32 group)=0
virtual std::optional< size_t > FindConflict(size_t binding, const InputSource &source) const =0
virtual std::span< const InputSource > GetSources(size_t binding) const =0
virtual Result< void > Register(ISettingsRegistry &settings)=0
virtual bool SetSources(size_t binding, std::span< const InputSource > sources)=0
virtual std::vector< std::string > TakeParseErrors()=0
virtual u32 GetGeneration() const =0
virtual bool SetSource(size_t binding, size_t slot, const InputSource &source)=0
Definition binding.h:193
virtual void SetPadButtons(u32 buttons)=0
virtual bool IsPending() const =0
virtual std::optional< InputSource > Poll(std::chrono::steady_clock::time_point now=std::chrono::steady_clock::now())=0
virtual bool WasCanceled() const =0
virtual void Begin()=0
std::expected< T, Error > Result
Definition result.h:98
Platform flags, packing macros and export markers.
#define REX_HID_API
Definition platform.h:228
The registry of every registered setting.
Definition input_keys.h:509
Definition binding.h:56
u32 group
Definition binding.h:63
std::string_view defaults
Definition binding.h:60
std::string_view name
Definition binding.h:58
PadAxes axes
Definition binding.h:65
Definition binding.h:180
std::chrono::milliseconds cancel_hold
Definition binding.h:182
Integer types, byte order wrappers and size literals.