LeviLamina
Loading...
Searching...
No Matches
InputHandler.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4
5// auto generated inclusion list
6#include "mc/deps/core/utility/NonOwnerPointer.h"
7#include "mc/deps/input/InputBindingMode.h"
8#include "mc/deps/input/InputMode.h"
9#include "mc/deps/input/enums/ButtonState.h"
10#include "mc/deps/input/enums/DirectionId.h"
11#include "mc/deps/input/enums/FocusImpact.h"
12#include "mc/deps/input/enums/RawInputType.h"
13
14// auto generated forward declare list
15// clang-format off
18class ButtonRepeater;
19class IClientInstance;
20class IMinecraftGame;
22class InputEventQueue;
24struct ButtonEventData;
28struct InputMapping;
34// clang-format on
35
36class InputHandler {
37public:
38 // InputHandler inner types declare
39 // clang-format off
40 struct InputHandlerState;
41 // clang-format on
42
43 // InputHandler inner types define
44 struct InputHandlerState {
45 public:
46 // member variables
47 // NOLINTBEGIN
48 ::ll::TypedStorage<4, 4, ::InputMode> mCurrentInputMode;
49 ::ll::TypedStorage<4, 4, ::InputBindingMode> mCurrentBindingMode;
50 ::ll::TypedStorage<8, 24, ::std::vector<::std::string>> mInputMappingStack;
51 ::ll::TypedStorage<8, 64, ::std::unordered_set<uint>> mButtonsDown;
52 ::ll::TypedStorage<8, 64, ::std::unordered_set<int>> mTriggeredChordsSources;
53 ::ll::TypedStorage<1, 1, bool> mSuspendInput;
54 ::ll::TypedStorage<1, 1, bool> mSuspendDirectionalInput;
55 ::ll::TypedStorage<1, 1, bool> mDisableInput;
56 // NOLINTEND
57
58 public:
59 // prevent constructor by default
60 InputHandlerState& operator=(InputHandlerState const&);
61 InputHandlerState(InputHandlerState const&);
62
63 public:
64 // member functions
65 // NOLINTBEGIN
66 MCAPI InputHandlerState();
67
68 MCAPI ::InputHandler::InputHandlerState& operator=(::InputHandler::InputHandlerState&&);
69
70 MCAPI ~InputHandlerState();
71 // NOLINTEND
72
73 public:
74 // constructor thunks
75 // NOLINTBEGIN
76 MCAPI void* $ctor();
77 // NOLINTEND
78
79 public:
80 // destructor thunk
81 // NOLINTBEGIN
82 MCAPI void $dtor();
83 // NOLINTEND
84 };
85
86 using InputModeHandler = ::std::function<void(::InputMode, ::IClientInstance&)>;
87
88 using ButtonPressHandler = ::std::function<void(::FocusImpact, ::IClientInstance&)>;
89
90 using TextCharHandler = ::std::function<void(::std::string const&, ::FocusImpact, ::IClientInstance&)>;
91
92 using CaretLocationHandler = ::std::function<void(int, ::FocusImpact, ::IClientInstance&)>;
93
94 using PointerLocationHandler =
95 ::std::function<void(::PointerLocationEventData const&, ::FocusImpact, ::IClientInstance&)>;
96
97 using PointerLocationWithIdHandler =
98 ::std::function<void(::PointerLocationWithIdEventData const&, ::IClientInstance&)>;
99
100 using ClearPointerLocationWithIdHandler =
101 ::std::function<void(::ClearPointerLocationWithIdEventData const&, ::IClientInstance&)>;
102
103 using ClearPointerLocationsHandler = ::std::function<void(::IClientInstance&)>;
104
105 using DirectionHandler = ::std::function<void(float, float, ::FocusImpact, ::IClientInstance&)>;
106
107 using TurnHandler = ::std::function<void(float, float, ::FocusImpact, ::IClientInstance&)>;
108
109 using VectorHandler = ::std::function<void(short, float, float, float, ::FocusImpact, ::IClientInstance&)>;
110
111 using AnyInputHandler = ::std::function<void(::IClientInstance&)>;
112
113 using RawInputHandler = ::std::function<void(int, ::RawInputType, ::ButtonState, bool, ::IClientInstance&)>;
114
115 using AddClientHandler = ::std::function<void(::IMinecraftGame*, int, bool)>;
116
117 using ChangeUserHandler = ::std::function<void(::IMinecraftGame*, int, bool)>;
118
119 using ControllerConnectionStateChangeHandler = ::std::function<void(::IClientInstance&, bool, int)>;
120
121 using TouchPadTouchHandler =
122 ::std::function<void(::TouchPadTouchEventData const&, ::FocusImpact, ::IClientInstance&)>;
123
124 using ControlOptionHandler = ::std::function<void(::ControlOptionEventData const&, ::IClientInstance&)>;
125
126 using NumberOfEnabledControlOptionsHandler =
127 ::std::function<void(::NumberOfEnabledControlOptionsEventData const&, ::IClientInstance&)>;
128
129 using OverlappingControlsHandler = ::std::function<void(::OverlappingControlsEventData const&, ::IClientInstance&)>;
130
131 using PotentialOverlappingControlsHandler = ::std::function<void(::IClientInstance&)>;
132
133 using InputModeHandlers = ::std::vector<::std::function<void(::InputMode, ::IClientInstance&)>>;
134
135 using ButtonHandlerMap =
136 ::std::multimap<uint, ::std::pair<bool, ::std::function<void(::FocusImpact, ::IClientInstance&)>>>;
137
138 using TextCharHandlers =
139 ::std::vector<::std::function<void(::std::string const&, ::FocusImpact, ::IClientInstance&)>>;
140
141 using CaretLocationHandlers = ::std::vector<::std::function<void(int, ::FocusImpact, ::IClientInstance&)>>;
142
143 using PointerLocationHandlers =
144 ::std::vector<::std::function<void(::PointerLocationEventData const&, ::FocusImpact, ::IClientInstance&)>>;
145
146 using PointerLocationWithIdHandlers =
147 ::std::vector<::std::function<void(::PointerLocationWithIdEventData const&, ::IClientInstance&)>>;
148
149 using ClearPointerLocationWithIdHandlers =
150 ::std::vector<::std::function<void(::ClearPointerLocationWithIdEventData const&, ::IClientInstance&)>>;
151
152 using ClearPointerLocationsHandlers = ::std::vector<::std::function<void(::IClientInstance&)>>;
153
154 using DirectionHandlerMap =
155 ::std::multimap<::DirectionId, ::std::function<void(float, float, ::FocusImpact, ::IClientInstance&)>>;
156
157 using VectorHandlers =
158 ::std::vector<::std::function<void(short, float, float, float, ::FocusImpact, ::IClientInstance&)>>;
159
160 using TouchPadHandlers =
161 ::std::vector<::std::function<void(::TouchPadTouchEventData const&, ::FocusImpact, ::IClientInstance&)>>;
162
163 using PointerLocationWithIdHandlersMap =
164 ::std::map<uint, ::std::function<void(::PointerLocationWithIdEventData const&, ::IClientInstance&)>>;
165
166 using ControlOptionHandlers =
167 ::std::vector<::std::function<void(::ControlOptionEventData const&, ::IClientInstance&)>>;
168
169 using NumberOfEnabledControlOptionsHandlers =
170 ::std::vector<::std::function<void(::NumberOfEnabledControlOptionsEventData const&, ::IClientInstance&)>>;
171
172 using OverlappingControlsHandlers =
173 ::std::vector<::std::function<void(::OverlappingControlsEventData const&, ::IClientInstance&)>>;
174
175 using PotentialOverlappingControlsHandlers = ::std::vector<::std::function<void(::IClientInstance&)>>;
176
177public:
178 // member variables
179 // NOLINTBEGIN
180 ::ll::TypedStorage<8, 24, ::std::vector<::std::function<void(::InputMode, ::IClientInstance&)>>> mInputModeHandlers;
181 ::ll::TypedStorage<
182 8,
183 16,
184 ::std::multimap<uint, ::std::pair<bool, ::std::function<void(::FocusImpact, ::IClientInstance&)>>>>
185 mButtonDownHandlerMap;
186 ::ll::TypedStorage<
187 8,
188 16,
189 ::std::multimap<uint, ::std::pair<bool, ::std::function<void(::FocusImpact, ::IClientInstance&)>>>>
190 mButtonUpHandlerMap;
191 ::ll::TypedStorage<
192 8,
193 24,
194 ::std::vector<::std::function<void(::std::string const&, ::FocusImpact, ::IClientInstance&)>>>
195 mTextCharHandlers;
196 ::ll::TypedStorage<8, 24, ::std::vector<::std::function<void(int, ::FocusImpact, ::IClientInstance&)>>>
197 mCaretLocationHandlers;
198 ::ll::TypedStorage<
199 8,
200 24,
201 ::std::vector<::std::function<void(::PointerLocationEventData const&, ::FocusImpact, ::IClientInstance&)>>>
202 mPointerLocationHandlers;
203 ::ll::TypedStorage<
204 8,
205 24,
206 ::std::vector<::std::function<void(::PointerLocationWithIdEventData const&, ::IClientInstance&)>>>
207 mPointerLocationWithIdHandlers;
208 ::ll::TypedStorage<
209 8,
210 24,
211 ::std::vector<::std::function<void(::ClearPointerLocationWithIdEventData const&, ::IClientInstance&)>>>
212 mClearPointerLocationWithIdHandlers;
213 ::ll::TypedStorage<8, 24, ::std::vector<::std::function<void(::IClientInstance&)>>> mClearPointerLocationsHandlers;
214 ::ll::TypedStorage<
215 8,
216 16,
217 ::std::multimap<::DirectionId, ::std::function<void(float, float, ::FocusImpact, ::IClientInstance&)>>>
218 mDirectionHandlerMap;
219 ::ll::TypedStorage<8, 64, ::std::function<void(::IClientInstance&)>> mAnyInputHandler;
220 ::ll::TypedStorage<8, 64, ::std::function<void(int, ::RawInputType, ::ButtonState, bool, ::IClientInstance&)>>
221 mRawInputHandler;
222 ::ll::TypedStorage<8, 64, ::std::function<void(::IMinecraftGame*, int, bool)>> mAddClientHandler;
223 ::ll::TypedStorage<8, 64, ::std::function<void(::IMinecraftGame*, int, bool)>> mChangeUserHandler;
224 ::ll::TypedStorage<8, 64, ::std::function<void(::IClientInstance&, bool, int)>>
225 mControllerConnectionStateChangeHandler;
226 ::ll::TypedStorage<
227 8,
228 24,
229 ::std::vector<::std::function<void(::TouchPadTouchEventData const&, ::FocusImpact, ::IClientInstance&)>>>
230 mTouchPadHandlers;
231 ::ll::TypedStorage<
232 8,
233 16,
234 ::std::map<uint, ::std::function<void(::PointerLocationWithIdEventData const&, ::IClientInstance&)>>>
235 mCustomZoneHandlers;
236 ::ll::TypedStorage<8, 24, ::std::vector<::std::function<void(::ControlOptionEventData const&, ::IClientInstance&)>>>
237 mControlOptionHandlers;
238 ::ll::TypedStorage<
239 8,
240 24,
241 ::std::vector<::std::function<void(::NumberOfEnabledControlOptionsEventData const&, ::IClientInstance&)>>>
242 mNumberOfEnabledControlOptionsHandlers;
243 ::ll::TypedStorage<
244 8,
245 24,
246 ::std::vector<::std::function<void(::OverlappingControlsEventData const&, ::IClientInstance&)>>>
247 mOverlappingControlsHandlers;
248 ::ll::TypedStorage<8, 24, ::std::vector<::std::function<void(::IClientInstance&)>>>
249 mPotentialOverlappingControlsHandlers;
250 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::InputEventQueue>> mInputEventQueue;
251 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::ButtonChordTracker>> mChordTracker;
252 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::ButtonRepeater>> mButtonRepeater;
253 ::ll::TypedStorage<8, 24, ::std::vector<::std::unique_ptr<::InputDeviceMapper>>> mInputDeviceMappers;
254 ::ll::TypedStorage<8, 8, ::BindingFactoryMap&> mBindingFactoryMap;
255 ::ll::TypedStorage<8, 8, ::InputMappingFactoryMap&> mInputMappingFactoryMap;
256 ::ll::TypedStorage<8, 64, ::std::unordered_map<int, ::InputHandler::InputHandlerState>> mPerIdState;
257 ::ll::TypedStorage<4, 4, int> mPrimaryGameControllerId;
258 // NOLINTEND
259
260public:
261 // prevent constructor by default
262 InputHandler& operator=(InputHandler const&);
263 InputHandler(InputHandler const&);
264 InputHandler();
265
266public:
267 // member functions
268 // NOLINTBEGIN
269 MCAPI InputHandler(
270 ::BindingFactoryMap& bindingFactoryMap,
271 ::InputMappingFactoryMap& mappingFactoryMap,
272 ::InputMode startingInputMode
273 );
274
275 MCAPI void _handleButtonEvent(
276 ::ButtonEventData const& button,
277 ::FocusImpact focusImpact,
278 ::IClientInstance& client,
279 int controllerId
280 );
281
282 MCAPI void
283 _handleMappingChange(::InputMapping const* newMapping, ::InputMapping const* oldMapping, int controllerId);
284
285 MCAPI void changeControllerId(int oldId, int newId);
286
287 MCAPI void clearInputMapping(int controllerId);
288
289 MCAPI ::std::string const& getCurrentInputMapping(int controllerId) const;
290
291 MCAPI ::InputMode getCurrentInputMode(int controllerId) const;
292
293 MCAPI void popInputMapping(int controllerId);
294
295 MCAPI void pushInputMapping(::std::string const& mappingName, int controllerId);
296
297 MCAPI void registerButtonDownHandler(
298 ::std::string buttonName,
299 ::std::function<void(::FocusImpact, ::IClientInstance&)> handler,
300 bool suspendable
301 );
302
303 MCAPI void registerButtonUpHandler(
304 ::std::string buttonName,
305 ::std::function<void(::FocusImpact, ::IClientInstance&)> handler,
306 bool suspendable
307 );
308
309 MCAPI void registerClearPointerLocationsHandler(::std::function<void(::IClientInstance&)> handler);
310
311 MCAPI void registerDirectionHandler(
312 ::DirectionId directionId,
313 ::std::function<void(float, float, ::FocusImpact, ::IClientInstance&)> handler
314 );
315
316 MCAPI void registerInputModeHandler(::std::function<void(::InputMode, ::IClientInstance&)> handler);
317
318 MCAPI void registerOverlappingControlsHandler(
319 ::std::function<void(::OverlappingControlsEventData const&, ::IClientInstance&)> handler
320 );
321
322 MCAPI void registerPotentialOverlappingControlsHandler(::std::function<void(::IClientInstance&)> handler);
323
324 MCAPI void registerTouchPadTouchHandler(
325 ::std::function<void(::TouchPadTouchEventData const&, ::FocusImpact, ::IClientInstance&)> handler
326 );
327
328 MCAPI void releaseButtonsAndSticks(::std::string const& currentMappingName, int controllerId);
329
330 MCAPI void tick(
331 ::IMinecraftGame* mcGame,
332 ::IClientInstance& primaryClientInstance,
333 ::Bedrock::NotNullNonOwnerPtr<::ControllerIDtoClientMap> const& controllerClientMap,
334 bool allowMultipleClients
335 );
336
337 MCAPI void updateInputMapping(::std::string const& mappingName, int controllerId);
338
339 MCAPI ~InputHandler();
340 // NOLINTEND
341
342public:
343 // constructor thunks
344 // NOLINTBEGIN
345 MCAPI void* $ctor(
346 ::BindingFactoryMap& bindingFactoryMap,
347 ::InputMappingFactoryMap& mappingFactoryMap,
348 ::InputMode startingInputMode
349 );
350 // NOLINTEND
351
352public:
353 // destructor thunk
354 // NOLINTBEGIN
355 MCAPI void $dtor();
356 // NOLINTEND
357};
Definition BindingFactoryMap.h:5
Definition ButtonChordTracker.h:5
Definition ButtonRepeater.h:5
Definition IClientInstance.h:5
Definition IMinecraftGame.h:5
Definition InputDeviceMapper.h:5
Definition InputEventQueue.h:5
Definition InputHandler.h:5
Definition InputMappingFactoryMap.h:5
Definition ButtonEventData.h:8
Definition ClearPointerLocationWithIdEventData.h:5
Definition ControlOptionEventData.h:5
Definition ControllerIDtoClientMap.h:13
Definition InputHandler.h:13
Definition InputMapping.h:5
Definition NumberOfEnabledControlOptionsEventData.h:5
Definition OverlappingControlsEventData.h:5
Definition PointerLocationEventData.h:8
Definition PointerLocationWithIdEventData.h:5
Definition TouchPadTouchEventData.h:5