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"
51 ::ll::TypedStorage<4, 4, ::InputMode> mCurrentInputMode;
52 ::ll::TypedStorage<4, 4, ::InputBindingMode> mCurrentBindingMode;
53 ::ll::TypedStorage<8, 24, ::std::vector<::std::string>> mInputMappingStack;
54 ::ll::TypedStorage<8, 64, ::std::unordered_set<uint>> mButtonsDown;
55 ::ll::TypedStorage<8, 64, ::std::unordered_set<int>> mTriggeredChordsSources;
56 ::ll::TypedStorage<4, 4, int> mCurrentChordSource;
57 ::ll::TypedStorage<1, 1, bool> mSuspendInput;
58 ::ll::TypedStorage<1, 1, bool> mSuspendDirectionalInput;
59 ::ll::TypedStorage<1, 1, bool> mDisableInput;
65 MCAPI ~InputHandlerState();
75 using InputModeHandler = ::std::function<void(::InputMode, ::IClientInstance&)>;
77 using ButtonPressHandler = ::std::function<void(::FocusImpact, ::IClientInstance&)>;
79 using TextCharHandler = ::std::function<void(::std::string
const&, ::FocusImpact, ::IClientInstance&)>;
81 using PointerLocationHandler =
82 ::std::function<void(::PointerLocationEventData
const&, ::FocusImpact, ::IClientInstance&)>;
84 using PointerLocationWithIdHandler =
85 ::std::function<void(::PointerLocationWithIdEventData
const&, ::IClientInstance&)>;
87 using ClearPointerLocationWithIdHandler =
88 ::std::function<void(::ClearPointerLocationWithIdEventData
const&, ::IClientInstance&)>;
90 using ClearPointerLocationsHandler = ::std::function<void(::IClientInstance&)>;
92 using DirectionHandler = ::std::function<void(
float,
float, ::FocusImpact, ::IClientInstance&)>;
94 using TurnHandler = ::std::function<void(
float,
float, ::FocusImpact, ::IClientInstance&)>;
96 using VectorHandler = ::std::function<void(
short,
float,
float,
float, ::FocusImpact, ::IClientInstance&)>;
98 using AnyInputHandler = ::std::function<void(::IClientInstance&)>;
100 using RawInputHandler = ::std::function<void(
int, ::RawInputType, ::ButtonState,
bool, ::IClientInstance&)>;
102 using AddClientHandler = ::std::function<void(::IMinecraftGame*,
int,
bool)>;
104 using ChangeUserHandler = ::std::function<void(::IMinecraftGame*,
int,
bool)>;
106 using ControllerConnectionStateChangeHandler = ::std::function<void(::IClientInstance&,
bool,
int)>;
108 using TouchPadTouchHandler =
109 ::std::function<void(::TouchPadTouchEventData
const&, ::FocusImpact, ::IClientInstance&)>;
111 using ControlOptionHandler = ::std::function<void(::ControlOptionEventData
const&, ::IClientInstance&)>;
113 using NumberOfEnabledControlOptionsHandler =
114 ::std::function<void(::NumberOfEnabledControlOptionsEventData
const&, ::IClientInstance&)>;
116 using OverlappingControlsHandler = ::std::function<void(::OverlappingControlsEventData
const&, ::IClientInstance&)>;
118 using PotentialOverlappingControlsHandler = ::std::function<void(::IClientInstance&)>;
120 using InputModeHandlers = ::std::vector<::std::function<void(::InputMode, ::IClientInstance&)>>;
122 using ButtonHandlerMap =
123 ::std::multimap<uint, ::std::pair<bool, ::std::function<void(::FocusImpact, ::IClientInstance&)>>>;
125 using TextCharHandlers =
126 ::std::vector<::std::function<void(::std::string
const&, ::FocusImpact, ::IClientInstance&)>>;
128 using PointerLocationHandlers =
129 ::std::vector<::std::function<void(::PointerLocationEventData
const&, ::FocusImpact, ::IClientInstance&)>>;
131 using PointerLocationWithIdHandlers =
132 ::std::vector<::std::function<void(::PointerLocationWithIdEventData
const&, ::IClientInstance&)>>;
134 using ClearPointerLocationWithIdHandlers =
135 ::std::vector<::std::function<void(::ClearPointerLocationWithIdEventData
const&, ::IClientInstance&)>>;
137 using ClearPointerLocationsHandlers = ::std::vector<::std::function<void(::IClientInstance&)>>;
139 using DirectionHandlerMap =
140 ::std::multimap<::DirectionId, ::std::function<void(
float,
float, ::FocusImpact, ::IClientInstance&)>>;
142 using VectorHandlers =
143 ::std::vector<::std::function<void(
short,
float,
float,
float, ::FocusImpact, ::IClientInstance&)>>;
145 using TouchPadHandlers =
146 ::std::vector<::std::function<void(::TouchPadTouchEventData
const&, ::FocusImpact, ::IClientInstance&)>>;
148 using PointerLocationWithIdHandlersMap =
149 ::std::map<uint, ::std::function<void(::PointerLocationWithIdEventData
const&, ::IClientInstance&)>>;
151 using ControlOptionHandlers =
152 ::std::vector<::std::function<void(::ControlOptionEventData
const&, ::IClientInstance&)>>;
154 using NumberOfEnabledControlOptionsHandlers =
155 ::std::vector<::std::function<void(::NumberOfEnabledControlOptionsEventData
const&, ::IClientInstance&)>>;
157 using OverlappingControlsHandlers =
158 ::std::vector<::std::function<void(::OverlappingControlsEventData
const&, ::IClientInstance&)>>;
160 using PotentialOverlappingControlsHandlers = ::std::vector<::std::function<void(::IClientInstance&)>>;
165 ::ll::TypedStorage<8, 24, ::std::vector<::std::function<void(::InputMode, ::IClientInstance&)>>> mInputModeHandlers;
169 ::std::multimap<uint, ::std::pair<bool, ::std::function<void(::FocusImpact, ::IClientInstance&)>>>>
170 mButtonDownHandlerMap;
174 ::std::multimap<uint, ::std::pair<bool, ::std::function<void(::FocusImpact, ::IClientInstance&)>>>>
179 ::std::vector<::std::function<void(::std::string
const&, ::FocusImpact, ::IClientInstance&)>>>
184 ::std::vector<::std::function<void(::PointerLocationEventData
const&, ::FocusImpact, ::IClientInstance&)>>>
185 mPointerLocationHandlers;
189 ::std::vector<::std::function<void(::PointerLocationWithIdEventData
const&, ::IClientInstance&)>>>
190 mPointerLocationWithIdHandlers;
194 ::std::vector<::std::function<void(::ClearPointerLocationWithIdEventData
const&, ::IClientInstance&)>>>
195 mClearPointerLocationWithIdHandlers;
196 ::ll::TypedStorage<8, 24, ::std::vector<::std::function<void(::IClientInstance&)>>> mClearPointerLocationsHandlers;
200 ::std::multimap<::DirectionId, ::std::function<void(
float,
float, ::FocusImpact, ::IClientInstance&)>>>
201 mDirectionHandlerMap;
202 ::ll::TypedStorage<8, 64, ::std::function<void(::IClientInstance&)>> mAnyInputHandler;
203 ::ll::TypedStorage<8, 64, ::std::function<void(
int, ::RawInputType, ::ButtonState,
bool, ::IClientInstance&)>>
205 ::ll::TypedStorage<8, 64, ::std::function<void(::IMinecraftGame*,
int,
bool)>> mAddClientHandler;
206 ::ll::TypedStorage<8, 64, ::std::function<void(::IMinecraftGame*,
int,
bool)>> mChangeUserHandler;
207 ::ll::TypedStorage<8, 64, ::std::function<void(::IClientInstance&,
bool,
int)>>
208 mControllerConnectionStateChangeHandler;
212 ::std::vector<::std::function<void(::TouchPadTouchEventData
const&, ::FocusImpact, ::IClientInstance&)>>>
217 ::std::map<uint, ::std::function<void(::PointerLocationWithIdEventData
const&, ::IClientInstance&)>>>
219 ::ll::TypedStorage<8, 24, ::std::vector<::std::function<void(::ControlOptionEventData
const&, ::IClientInstance&)>>>
220 mControlOptionHandlers;
224 ::std::vector<::std::function<void(::NumberOfEnabledControlOptionsEventData
const&, ::IClientInstance&)>>>
225 mNumberOfEnabledControlOptionsHandlers;
229 ::std::vector<::std::function<void(::OverlappingControlsEventData
const&, ::IClientInstance&)>>>
230 mOverlappingControlsHandlers;
231 ::ll::TypedStorage<8, 24, ::std::vector<::std::function<void(::IClientInstance&)>>>
232 mPotentialOverlappingControlsHandlers;
233 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::InputEventQueue>> mInputEventQueue;
234 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::ButtonChordTracker>> mChordTracker;
235 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::ButtonRepeater>> mButtonRepeater;
236 ::ll::TypedStorage<8, 24, ::std::vector<::std::unique_ptr<::InputDeviceMapper>>> mInputDeviceMappers;
237 ::ll::TypedStorage<8, 8, ::BindingFactoryMap&> mBindingFactoryMap;
238 ::ll::TypedStorage<8, 8, ::InputMappingFactoryMap&> mInputMappingFactoryMap;
239 ::ll::TypedStorage<8, 64, ::std::unordered_map<int, ::InputHandler::InputHandlerState>> mPerIdState;
240 ::ll::TypedStorage<4, 4, int> mPrimaryGameControllerId;
245 InputHandler& operator=(InputHandler
const&);
246 InputHandler(InputHandler
const&);
253 ::BindingFactoryMap& bindingFactoryMap,
254 ::InputMappingFactoryMap& mappingFactoryMap,
255 ::InputMode startingInputMode
258 MCAPI
void _handleButtonEvent(
259 ::ButtonEventData
const& button,
260 ::FocusImpact focusImpact,
261 ::IClientInstance& client,
265 MCAPI
void _handleDirectionEvent(
266 ::DirectionEventData
const& direction,
267 ::FocusImpact focusImpact,
268 ::IClientInstance& client,
269 bool suspendedDirectionalInput
273 _handleMappingChange(::InputMapping
const* newMapping, ::InputMapping
const* oldMapping,
int controllerId);
275 MCAPI
void _handlePointerLocationEvent(
276 ::PointerLocationEventData
const& pointerLocation,
277 ::FocusImpact focusImpact,
278 ::IClientInstance& client,
283 _handleTextCharEvent(::TextCharEventData
const& textChar, ::FocusImpact focusImpact, ::IClientInstance& client);
285 MCAPI
void changeControllerId(
int oldId,
int newId);
287 MCAPI
void clearInputDeviceQueues();
289 MCAPI
void clearInputDeviceQueuesForFrame();
291 MCAPI
void clearInputMapping(
int controllerId);
293 MCAPI
void clearInvalidDownKeys(
int controllerId);
295 MCAPI ::std::string
const& getCurrentInputMapping(
int controllerId)
const;
297 MCAPI ::InputMode getCurrentInputMode(
int controllerId)
const;
299 MCAPI
void initNewControllerIdOwner(
int controllerId, ::InputMode initialInputMode);
301 MCAPI
void popInputMapping(
int controllerId);
303 MCAPI
void pushInputMapping(::std::string
const& mappingName,
int controllerId);
305 MCAPI
void refreshInputMapping(
int controllerId);
307 MCAPI
void registerAddClientHandler(::std::function<
void(::IMinecraftGame*,
int,
bool)> handler);
309 MCFOLD
void registerAnyInputHandler(::std::function<
void(::IClientInstance&)> handler);
311 MCAPI
void registerButtonDownHandler(
312 ::std::string buttonName,
313 ::std::function<
void(::FocusImpact, ::IClientInstance&)> handler,
317 MCAPI
void registerButtonUpHandler(
318 ::std::string buttonName,
319 ::std::function<
void(::FocusImpact, ::IClientInstance&)> handler,
323 MCAPI
void registerChangeUserHandler(::std::function<
void(::IMinecraftGame*,
int,
bool)> handler);
325 MCAPI
void registerClearPointerLocationWithIdHandler(
326 ::std::function<
void(::ClearPointerLocationWithIdEventData
const&, ::IClientInstance&)> handler
329 MCAPI
void registerClearPointerLocationsHandler(::std::function<
void(::IClientInstance&)> handler);
332 registerControlOptionHandler(::std::function<
void(::ControlOptionEventData
const&, ::IClientInstance&)> handler);
335 registerControllerConnectionStateChangeHandler(::std::function<
void(::IClientInstance&,
bool,
int)> handler);
337 MCAPI
void registerDirectionHandler(
338 ::DirectionId directionId,
339 ::std::function<
void(
float,
float, ::FocusImpact, ::IClientInstance&)> handler
342 MCAPI
void registerInputDeviceMapper(::std::unique_ptr<::InputDeviceMapper> mapper);
344 MCAPI
void registerInputModeHandler(::std::function<
void(::InputMode, ::IClientInstance&)> handler);
346 MCAPI
void registerNumberOfEnabledControlOptionsHandler(
347 ::std::function<
void(::NumberOfEnabledControlOptionsEventData
const&, ::IClientInstance&)> handler
350 MCAPI
void registerOverlappingControlsHandler(
351 ::std::function<
void(::OverlappingControlsEventData
const&, ::IClientInstance&)> handler
354 MCAPI
void registerPointerLocationHandler(
355 ::std::function<
void(::PointerLocationEventData
const&, ::FocusImpact, ::IClientInstance&)> handler
358 MCAPI
void registerPointerLocationWithIdHandler(
359 ::std::function<
void(::PointerLocationWithIdEventData
const&, ::IClientInstance&)> handler
362 MCAPI
void registerPotentialOverlappingControlsHandler(::std::function<
void(::IClientInstance&)> handler);
364 MCAPI
void registerRawInputHandler(
365 ::std::function<
void(
int, ::RawInputType, ::ButtonState,
bool, ::IClientInstance&)> handler
369 registerTextCharHandler(::std::function<
void(::std::string
const&, ::FocusImpact, ::IClientInstance&)> handler);
371 MCAPI
void registerTouchPadTouchHandler(
372 ::std::function<
void(::TouchPadTouchEventData
const&, ::FocusImpact, ::IClientInstance&)> handler
375 MCAPI
void releaseButtonsAndSticks(::std::string
const& currentMappingName,
int controllerId);
377 MCAPI
void render(::InputRenderContext& renderContext)
const;
379 MCAPI
void setDisableInput(
bool disable,
int controllerId);
381 MCAPI
void setInputBindingMode(::InputBindingMode mode,
int controllerId);
383 MCAPI
void setSuspendDirectionalInput(
bool suspendDirectionalInput,
int controllerId);
385 MCAPI
void setSuspendInput(
bool suspendInput,
int controllerId);
387 MCAPI
void setWindowSize(
int width,
int height);
390 ::IMinecraftGame* mcGame,
391 ::IClientInstance& primaryClientInstance,
392 ::Bedrock::NotNullNonOwnerPtr<::ControllerIDtoClientMap>
const& controllerClientMap,
393 bool allowMultipleClients
396 MCAPI
void updateInputMapping(::std::string
const& mappingName,
int controllerId);
398 MCAPI ~InputHandler();
405 ::BindingFactoryMap& bindingFactoryMap,
406 ::InputMappingFactoryMap& mappingFactoryMap,
407 ::InputMode startingInputMode
Definition BindingFactoryMap.h:5
Definition IClientInstance.h:5
Definition IMinecraftGame.h:5
Definition InputRenderContext.h:5
Definition ClearPointerLocationWithIdEventData.h:5
Definition ControlOptionEventData.h:5
Definition ControllerIDtoClientMap.h:5
Definition DirectionEventData.h:5
Definition NumberOfEnabledControlOptionsEventData.h:5
Definition OverlappingControlsEventData.h:5
Definition PointerLocationEventData.h:5
Definition PointerLocationWithIdEventData.h:5
Definition TextCharEventData.h:5
Definition TouchPadTouchEventData.h:5