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<1, 1, bool> mSuspendInput;
54 ::ll::TypedStorage<1, 1, bool> mSuspendDirectionalInput;
55 ::ll::TypedStorage<1, 1, bool> mDisableInput;
60 InputHandlerState& operator=(InputHandlerState
const&);
61 InputHandlerState(InputHandlerState
const&);
66 MCAPI InputHandlerState();
68 MCAPI ::InputHandler::InputHandlerState& operator=(::InputHandler::InputHandlerState&&);
70 MCAPI ~InputHandlerState();
86 using InputModeHandler = ::std::function<void(::InputMode, ::IClientInstance&)>;
88 using ButtonPressHandler = ::std::function<void(::FocusImpact, ::IClientInstance&)>;
90 using TextCharHandler = ::std::function<void(::std::string
const&, ::FocusImpact, ::IClientInstance&)>;
92 using CaretLocationHandler = ::std::function<void(
int, ::FocusImpact, ::IClientInstance&)>;
94 using PointerLocationHandler =
95 ::std::function<void(::PointerLocationEventData
const&, ::FocusImpact, ::IClientInstance&)>;
97 using PointerLocationWithIdHandler =
98 ::std::function<void(::PointerLocationWithIdEventData
const&, ::IClientInstance&)>;
100 using ClearPointerLocationWithIdHandler =
101 ::std::function<void(::ClearPointerLocationWithIdEventData
const&, ::IClientInstance&)>;
103 using ClearPointerLocationsHandler = ::std::function<void(::IClientInstance&)>;
105 using DirectionHandler = ::std::function<void(
float,
float, ::FocusImpact, ::IClientInstance&)>;
107 using TurnHandler = ::std::function<void(
float,
float, ::FocusImpact, ::IClientInstance&)>;
109 using VectorHandler = ::std::function<void(
short,
float,
float,
float, ::FocusImpact, ::IClientInstance&)>;
111 using AnyInputHandler = ::std::function<void(::IClientInstance&)>;
113 using RawInputHandler = ::std::function<void(
int, ::RawInputType, ::ButtonState,
bool, ::IClientInstance&)>;
115 using AddClientHandler = ::std::function<void(::IMinecraftGame*,
int,
bool)>;
117 using ChangeUserHandler = ::std::function<void(::IMinecraftGame*,
int,
bool)>;
119 using ControllerConnectionStateChangeHandler = ::std::function<void(::IClientInstance&,
bool,
int)>;
121 using TouchPadTouchHandler =
122 ::std::function<void(::TouchPadTouchEventData
const&, ::FocusImpact, ::IClientInstance&)>;
124 using ControlOptionHandler = ::std::function<void(::ControlOptionEventData
const&, ::IClientInstance&)>;
126 using NumberOfEnabledControlOptionsHandler =
127 ::std::function<void(::NumberOfEnabledControlOptionsEventData
const&, ::IClientInstance&)>;
129 using OverlappingControlsHandler = ::std::function<void(::OverlappingControlsEventData
const&, ::IClientInstance&)>;
131 using PotentialOverlappingControlsHandler = ::std::function<void(::IClientInstance&)>;
133 using InputModeHandlers = ::std::vector<::std::function<void(::InputMode, ::IClientInstance&)>>;
135 using ButtonHandlerMap =
136 ::std::multimap<uint, ::std::pair<bool, ::std::function<void(::FocusImpact, ::IClientInstance&)>>>;
138 using TextCharHandlers =
139 ::std::vector<::std::function<void(::std::string
const&, ::FocusImpact, ::IClientInstance&)>>;
141 using CaretLocationHandlers = ::std::vector<::std::function<void(
int, ::FocusImpact, ::IClientInstance&)>>;
143 using PointerLocationHandlers =
144 ::std::vector<::std::function<void(::PointerLocationEventData
const&, ::FocusImpact, ::IClientInstance&)>>;
146 using PointerLocationWithIdHandlers =
147 ::std::vector<::std::function<void(::PointerLocationWithIdEventData
const&, ::IClientInstance&)>>;
149 using ClearPointerLocationWithIdHandlers =
150 ::std::vector<::std::function<void(::ClearPointerLocationWithIdEventData
const&, ::IClientInstance&)>>;
152 using ClearPointerLocationsHandlers = ::std::vector<::std::function<void(::IClientInstance&)>>;
154 using DirectionHandlerMap =
155 ::std::multimap<::DirectionId, ::std::function<void(
float,
float, ::FocusImpact, ::IClientInstance&)>>;
157 using VectorHandlers =
158 ::std::vector<::std::function<void(
short,
float,
float,
float, ::FocusImpact, ::IClientInstance&)>>;
160 using TouchPadHandlers =
161 ::std::vector<::std::function<void(::TouchPadTouchEventData
const&, ::FocusImpact, ::IClientInstance&)>>;
163 using PointerLocationWithIdHandlersMap =
164 ::std::map<uint, ::std::function<void(::PointerLocationWithIdEventData
const&, ::IClientInstance&)>>;
166 using ControlOptionHandlers =
167 ::std::vector<::std::function<void(::ControlOptionEventData
const&, ::IClientInstance&)>>;
169 using NumberOfEnabledControlOptionsHandlers =
170 ::std::vector<::std::function<void(::NumberOfEnabledControlOptionsEventData
const&, ::IClientInstance&)>>;
172 using OverlappingControlsHandlers =
173 ::std::vector<::std::function<void(::OverlappingControlsEventData
const&, ::IClientInstance&)>>;
175 using PotentialOverlappingControlsHandlers = ::std::vector<::std::function<void(::IClientInstance&)>>;
180 ::ll::TypedStorage<8, 24, ::std::vector<::std::function<void(::InputMode, ::IClientInstance&)>>> mInputModeHandlers;
184 ::std::multimap<uint, ::std::pair<bool, ::std::function<void(::FocusImpact, ::IClientInstance&)>>>>
185 mButtonDownHandlerMap;
189 ::std::multimap<uint, ::std::pair<bool, ::std::function<void(::FocusImpact, ::IClientInstance&)>>>>
194 ::std::vector<::std::function<void(::std::string
const&, ::FocusImpact, ::IClientInstance&)>>>
196 ::ll::TypedStorage<8, 24, ::std::vector<::std::function<void(
int, ::FocusImpact, ::IClientInstance&)>>>
197 mCaretLocationHandlers;
201 ::std::vector<::std::function<void(::PointerLocationEventData
const&, ::FocusImpact, ::IClientInstance&)>>>
202 mPointerLocationHandlers;
206 ::std::vector<::std::function<void(::PointerLocationWithIdEventData
const&, ::IClientInstance&)>>>
207 mPointerLocationWithIdHandlers;
211 ::std::vector<::std::function<void(::ClearPointerLocationWithIdEventData
const&, ::IClientInstance&)>>>
212 mClearPointerLocationWithIdHandlers;
213 ::ll::TypedStorage<8, 24, ::std::vector<::std::function<void(::IClientInstance&)>>> mClearPointerLocationsHandlers;
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&)>>
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;
229 ::std::vector<::std::function<void(::TouchPadTouchEventData
const&, ::FocusImpact, ::IClientInstance&)>>>
234 ::std::map<uint, ::std::function<void(::PointerLocationWithIdEventData
const&, ::IClientInstance&)>>>
236 ::ll::TypedStorage<8, 24, ::std::vector<::std::function<void(::ControlOptionEventData
const&, ::IClientInstance&)>>>
237 mControlOptionHandlers;
241 ::std::vector<::std::function<void(::NumberOfEnabledControlOptionsEventData
const&, ::IClientInstance&)>>>
242 mNumberOfEnabledControlOptionsHandlers;
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;
262 InputHandler& operator=(InputHandler
const&);
263 InputHandler(InputHandler
const&);
270 ::BindingFactoryMap& bindingFactoryMap,
271 ::InputMappingFactoryMap& mappingFactoryMap,
272 ::InputMode startingInputMode
275 MCAPI
void _handleButtonEvent(
276 ::ButtonEventData
const& button,
277 ::FocusImpact focusImpact,
278 ::IClientInstance& client,
283 _handleMappingChange(::InputMapping
const* newMapping, ::InputMapping
const* oldMapping,
int controllerId);
285 MCAPI
void changeControllerId(
int oldId,
int newId);
287 MCAPI
void clearInputMapping(
int controllerId);
289 MCAPI ::std::string
const& getCurrentInputMapping(
int controllerId)
const;
291 MCAPI ::InputMode getCurrentInputMode(
int controllerId)
const;
293 MCAPI
void popInputMapping(
int controllerId);
295 MCAPI
void pushInputMapping(::std::string
const& mappingName,
int controllerId);
297 MCAPI
void registerButtonDownHandler(
298 ::std::string buttonName,
299 ::std::function<
void(::FocusImpact, ::IClientInstance&)> handler,
303 MCAPI
void registerButtonUpHandler(
304 ::std::string buttonName,
305 ::std::function<
void(::FocusImpact, ::IClientInstance&)> handler,
309 MCAPI
void registerClearPointerLocationsHandler(::std::function<
void(::IClientInstance&)> handler);
311 MCAPI
void registerDirectionHandler(
312 ::DirectionId directionId,
313 ::std::function<
void(
float,
float, ::FocusImpact, ::IClientInstance&)> handler
316 MCAPI
void registerInputModeHandler(::std::function<
void(::InputMode, ::IClientInstance&)> handler);
318 MCAPI
void registerOverlappingControlsHandler(
319 ::std::function<
void(::OverlappingControlsEventData
const&, ::IClientInstance&)> handler
322 MCAPI
void registerPotentialOverlappingControlsHandler(::std::function<
void(::IClientInstance&)> handler);
324 MCAPI
void registerTouchPadTouchHandler(
325 ::std::function<
void(::TouchPadTouchEventData
const&, ::FocusImpact, ::IClientInstance&)> handler
328 MCAPI
void releaseButtonsAndSticks(::std::string
const& currentMappingName,
int controllerId);
331 ::IMinecraftGame* mcGame,
332 ::IClientInstance& primaryClientInstance,
333 ::Bedrock::NotNullNonOwnerPtr<::ControllerIDtoClientMap>
const& controllerClientMap,
334 bool allowMultipleClients
337 MCAPI
void updateInputMapping(::std::string
const& mappingName,
int controllerId);
339 MCAPI ~InputHandler();
346 ::BindingFactoryMap& bindingFactoryMap,
347 ::InputMappingFactoryMap& mappingFactoryMap,
348 ::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