3#include "mc/_HeaderOutputPredefine.h"
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"
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<4, 4, int> mCurrentChordSource;
54 ::ll::TypedStorage<1, 1, bool> mSuspendInput;
55 ::ll::TypedStorage<1, 1, bool> mSuspendDirectionalInput;
56 ::ll::TypedStorage<1, 1, bool> mDisableInput;
61 InputHandlerState& operator=(InputHandlerState
const&);
62 InputHandlerState(InputHandlerState
const&);
67 MCAPI InputHandlerState();
69 MCAPI ::InputHandler::InputHandlerState& operator=(::InputHandler::InputHandlerState&&);
71 MCAPI ~InputHandlerState();
87 using InputModeHandler = ::std::function<void(::InputMode, ::IClientInstance&)>;
89 using ButtonPressHandler = ::std::function<void(::FocusImpact, ::IClientInstance&)>;
91 using TextCharHandler = ::std::function<void(::std::string
const&, ::FocusImpact, ::IClientInstance&)>;
93 using CaretLocationHandler = ::std::function<void(
int, ::FocusImpact, ::IClientInstance&)>;
95 using PointerLocationHandler =
96 ::std::function<void(::PointerLocationEventData
const&, ::FocusImpact, ::IClientInstance&)>;
98 using PointerLocationWithIdHandler =
99 ::std::function<void(::PointerLocationWithIdEventData
const&, ::IClientInstance&)>;
101 using ClearPointerLocationWithIdHandler =
102 ::std::function<void(::ClearPointerLocationWithIdEventData
const&, ::IClientInstance&)>;
104 using ClearPointerLocationsHandler = ::std::function<void(::IClientInstance&)>;
106 using DirectionHandler = ::std::function<void(
float,
float, ::FocusImpact, ::IClientInstance&)>;
108 using TurnHandler = ::std::function<void(
float,
float, ::FocusImpact, ::IClientInstance&)>;
110 using VectorHandler = ::std::function<void(
short,
float,
float,
float, ::FocusImpact, ::IClientInstance&)>;
112 using AnyInputHandler = ::std::function<void(::IClientInstance&)>;
114 using RawInputHandler = ::std::function<void(
int, ::RawInputType, ::ButtonState,
bool, ::IClientInstance&)>;
116 using AddClientHandler = ::std::function<void(::IMinecraftGame*,
int,
bool)>;
118 using ChangeUserHandler = ::std::function<void(::IMinecraftGame*,
int,
bool)>;
120 using ControllerConnectionStateChangeHandler = ::std::function<void(::IClientInstance&,
bool,
int)>;
122 using TouchPadTouchHandler =
123 ::std::function<void(::TouchPadTouchEventData
const&, ::FocusImpact, ::IClientInstance&)>;
125 using ControlOptionHandler = ::std::function<void(::ControlOptionEventData
const&, ::IClientInstance&)>;
127 using NumberOfEnabledControlOptionsHandler =
128 ::std::function<void(::NumberOfEnabledControlOptionsEventData
const&, ::IClientInstance&)>;
130 using OverlappingControlsHandler = ::std::function<void(::OverlappingControlsEventData
const&, ::IClientInstance&)>;
132 using PotentialOverlappingControlsHandler = ::std::function<void(::IClientInstance&)>;
134 using InputModeHandlers = ::std::vector<::std::function<void(::InputMode, ::IClientInstance&)>>;
136 using ButtonHandlerMap =
137 ::std::multimap<uint, ::std::pair<bool, ::std::function<void(::FocusImpact, ::IClientInstance&)>>>;
139 using TextCharHandlers =
140 ::std::vector<::std::function<void(::std::string
const&, ::FocusImpact, ::IClientInstance&)>>;
142 using CaretLocationHandlers = ::std::vector<::std::function<void(
int, ::FocusImpact, ::IClientInstance&)>>;
144 using PointerLocationHandlers =
145 ::std::vector<::std::function<void(::PointerLocationEventData
const&, ::FocusImpact, ::IClientInstance&)>>;
147 using PointerLocationWithIdHandlers =
148 ::std::vector<::std::function<void(::PointerLocationWithIdEventData
const&, ::IClientInstance&)>>;
150 using ClearPointerLocationWithIdHandlers =
151 ::std::vector<::std::function<void(::ClearPointerLocationWithIdEventData
const&, ::IClientInstance&)>>;
153 using ClearPointerLocationsHandlers = ::std::vector<::std::function<void(::IClientInstance&)>>;
155 using DirectionHandlerMap =
156 ::std::multimap<::DirectionId, ::std::function<void(
float,
float, ::FocusImpact, ::IClientInstance&)>>;
158 using VectorHandlers =
159 ::std::vector<::std::function<void(
short,
float,
float,
float, ::FocusImpact, ::IClientInstance&)>>;
161 using TouchPadHandlers =
162 ::std::vector<::std::function<void(::TouchPadTouchEventData
const&, ::FocusImpact, ::IClientInstance&)>>;
164 using PointerLocationWithIdHandlersMap =
165 ::std::map<uint, ::std::function<void(::PointerLocationWithIdEventData
const&, ::IClientInstance&)>>;
167 using ControlOptionHandlers =
168 ::std::vector<::std::function<void(::ControlOptionEventData
const&, ::IClientInstance&)>>;
170 using NumberOfEnabledControlOptionsHandlers =
171 ::std::vector<::std::function<void(::NumberOfEnabledControlOptionsEventData
const&, ::IClientInstance&)>>;
173 using OverlappingControlsHandlers =
174 ::std::vector<::std::function<void(::OverlappingControlsEventData
const&, ::IClientInstance&)>>;
176 using PotentialOverlappingControlsHandlers = ::std::vector<::std::function<void(::IClientInstance&)>>;
181 ::ll::TypedStorage<8, 24, ::std::vector<::std::function<void(::InputMode, ::IClientInstance&)>>> mInputModeHandlers;
185 ::std::multimap<uint, ::std::pair<bool, ::std::function<void(::FocusImpact, ::IClientInstance&)>>>>
186 mButtonDownHandlerMap;
190 ::std::multimap<uint, ::std::pair<bool, ::std::function<void(::FocusImpact, ::IClientInstance&)>>>>
195 ::std::vector<::std::function<void(::std::string
const&, ::FocusImpact, ::IClientInstance&)>>>
197 ::ll::TypedStorage<8, 24, ::std::vector<::std::function<void(
int, ::FocusImpact, ::IClientInstance&)>>>
198 mCaretLocationHandlers;
202 ::std::vector<::std::function<void(::PointerLocationEventData
const&, ::FocusImpact, ::IClientInstance&)>>>
203 mPointerLocationHandlers;
207 ::std::vector<::std::function<void(::PointerLocationWithIdEventData
const&, ::IClientInstance&)>>>
208 mPointerLocationWithIdHandlers;
212 ::std::vector<::std::function<void(::ClearPointerLocationWithIdEventData
const&, ::IClientInstance&)>>>
213 mClearPointerLocationWithIdHandlers;
214 ::ll::TypedStorage<8, 24, ::std::vector<::std::function<void(::IClientInstance&)>>> mClearPointerLocationsHandlers;
218 ::std::multimap<::DirectionId, ::std::function<void(
float,
float, ::FocusImpact, ::IClientInstance&)>>>
219 mDirectionHandlerMap;
220 ::ll::TypedStorage<8, 64, ::std::function<void(::IClientInstance&)>> mAnyInputHandler;
221 ::ll::TypedStorage<8, 64, ::std::function<void(
int, ::RawInputType, ::ButtonState,
bool, ::IClientInstance&)>>
223 ::ll::TypedStorage<8, 64, ::std::function<void(::IMinecraftGame*,
int,
bool)>> mAddClientHandler;
224 ::ll::TypedStorage<8, 64, ::std::function<void(::IMinecraftGame*,
int,
bool)>> mChangeUserHandler;
225 ::ll::TypedStorage<8, 64, ::std::function<void(::IClientInstance&,
bool,
int)>>
226 mControllerConnectionStateChangeHandler;
230 ::std::vector<::std::function<void(::TouchPadTouchEventData
const&, ::FocusImpact, ::IClientInstance&)>>>
235 ::std::map<uint, ::std::function<void(::PointerLocationWithIdEventData
const&, ::IClientInstance&)>>>
237 ::ll::TypedStorage<8, 24, ::std::vector<::std::function<void(::ControlOptionEventData
const&, ::IClientInstance&)>>>
238 mControlOptionHandlers;
242 ::std::vector<::std::function<void(::NumberOfEnabledControlOptionsEventData
const&, ::IClientInstance&)>>>
243 mNumberOfEnabledControlOptionsHandlers;
247 ::std::vector<::std::function<void(::OverlappingControlsEventData
const&, ::IClientInstance&)>>>
248 mOverlappingControlsHandlers;
249 ::ll::TypedStorage<8, 24, ::std::vector<::std::function<void(::IClientInstance&)>>>
250 mPotentialOverlappingControlsHandlers;
251 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::InputEventQueue>> mInputEventQueue;
252 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::ButtonChordTracker>> mChordTracker;
253 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::ButtonRepeater>> mButtonRepeater;
254 ::ll::TypedStorage<8, 24, ::std::vector<::std::unique_ptr<::InputDeviceMapper>>> mInputDeviceMappers;
255 ::ll::TypedStorage<8, 8, ::BindingFactoryMap&> mBindingFactoryMap;
256 ::ll::TypedStorage<8, 8, ::InputMappingFactoryMap&> mInputMappingFactoryMap;
257 ::ll::TypedStorage<8, 64, ::std::unordered_map<int, ::InputHandler::InputHandlerState>> mPerIdState;
258 ::ll::TypedStorage<4, 4, int> mPrimaryGameControllerId;
263 InputHandler& operator=(InputHandler
const&);
264 InputHandler(InputHandler
const&);
271 ::BindingFactoryMap& bindingFactoryMap,
272 ::InputMappingFactoryMap& mappingFactoryMap,
273 ::InputMode startingInputMode
276 MCAPI
void _handleButtonEvent(
277 ::ButtonEventData
const& button,
278 ::FocusImpact focusImpact,
279 ::IClientInstance& client,
284 _handleMappingChange(::InputMapping
const* newMapping, ::InputMapping
const* oldMapping,
int controllerId);
286 MCAPI
void changeControllerId(
int oldId,
int newId);
288 MCAPI
void clearInputMapping(
int controllerId);
290 MCAPI ::std::string
const& getCurrentInputMapping(
int controllerId)
const;
292 MCAPI ::InputMode getCurrentInputMode(
int controllerId)
const;
294 MCAPI
void popInputMapping(
int controllerId);
296 MCAPI
void pushInputMapping(::std::string
const& mappingName,
int controllerId);
298 MCAPI
void registerButtonDownHandler(
299 ::std::string buttonName,
300 ::std::function<
void(::FocusImpact, ::IClientInstance&)> handler,
304 MCAPI
void registerButtonUpHandler(
305 ::std::string buttonName,
306 ::std::function<
void(::FocusImpact, ::IClientInstance&)> handler,
310 MCAPI
void registerCaretLocationHandler(::std::function<
void(
int, ::FocusImpact, ::IClientInstance&)> handler);
312 MCAPI
void registerClearPointerLocationWithIdHandler(
313 ::std::function<
void(::ClearPointerLocationWithIdEventData
const&, ::IClientInstance&)> handler
316 MCAPI
void registerClearPointerLocationsHandler(::std::function<
void(::IClientInstance&)> handler);
319 registerControlOptionHandler(::std::function<
void(::ControlOptionEventData
const&, ::IClientInstance&)> handler);
321 MCAPI
void registerDirectionHandler(
322 ::DirectionId directionId,
323 ::std::function<
void(
float,
float, ::FocusImpact, ::IClientInstance&)> handler
326 MCAPI
void registerInputModeHandler(::std::function<
void(::InputMode, ::IClientInstance&)> handler);
328 MCAPI
void registerNumberOfEnabledControlOptionsHandler(
329 ::std::function<
void(::NumberOfEnabledControlOptionsEventData
const&, ::IClientInstance&)> handler
332 MCAPI
void registerOverlappingControlsHandler(
333 ::std::function<
void(::OverlappingControlsEventData
const&, ::IClientInstance&)> handler
336 MCAPI
void registerPointerLocationHandler(
337 ::std::function<
void(::PointerLocationEventData
const&, ::FocusImpact, ::IClientInstance&)> handler
340 MCAPI
void registerPointerLocationWithIdHandler(
341 ::std::function<
void(::PointerLocationWithIdEventData
const&, ::IClientInstance&)> handler
344 MCAPI
void registerPotentialOverlappingControlsHandler(::std::function<
void(::IClientInstance&)> handler);
347 registerTextCharHandler(::std::function<
void(::std::string
const&, ::FocusImpact, ::IClientInstance&)> handler);
349 MCAPI
void registerTouchPadTouchHandler(
350 ::std::function<
void(::TouchPadTouchEventData
const&, ::FocusImpact, ::IClientInstance&)> handler
353 MCAPI
void releaseButtonsAndSticks(::std::string
const& currentMappingName,
int controllerId);
356 ::IMinecraftGame* mcGame,
357 ::IClientInstance& primaryClientInstance,
358 ::Bedrock::NotNullNonOwnerPtr<::ControllerIDtoClientMap>
const& controllerClientMap,
359 bool allowMultipleClients
362 MCAPI
void updateInputMapping(::std::string
const& mappingName,
int controllerId);
364 MCAPI ~InputHandler();
371 ::BindingFactoryMap& bindingFactoryMap,
372 ::InputMappingFactoryMap& mappingFactoryMap,
373 ::InputMode startingInputMode
Definition BindingFactoryMap.h:5
Definition IClientInstance.h:5
Definition IMinecraftGame.h:5
Definition ClearPointerLocationWithIdEventData.h:5
Definition ControlOptionEventData.h:5
Definition ControllerIDtoClientMap.h:13
Definition NumberOfEnabledControlOptionsEventData.h:5
Definition OverlappingControlsEventData.h:5
Definition PointerLocationEventData.h:8
Definition PointerLocationWithIdEventData.h:5
Definition TouchPadTouchEventData.h:5