diff options
Diffstat (limited to 'core/input/input.h')
-rw-r--r-- | core/input/input.h | 57 |
1 files changed, 45 insertions, 12 deletions
diff --git a/core/input/input.h b/core/input/input.h index 2e136dbf02..9accf14a4f 100644 --- a/core/input/input.h +++ b/core/input/input.h @@ -145,7 +145,7 @@ private: StringName name; StringName uid; bool connected; - bool last_buttons[JOY_BUTTON_MAX + 19]; //apparently SDL specifies 35 possible buttons on android + bool last_buttons[JOY_BUTTON_MAX]; float last_axis[JOY_AXIS_MAX]; float filter; int last_hat; @@ -154,11 +154,9 @@ private: Joypad() { for (int i = 0; i < JOY_AXIS_MAX; i++) { - last_axis[i] = 0.0f; } - for (int i = 0; i < JOY_BUTTON_MAX + 19; i++) { - + for (int i = 0; i < JOY_BUTTON_MAX; i++) { last_buttons[i] = false; } connected = false; @@ -183,26 +181,61 @@ private: TYPE_MAX, }; + enum JoyAxisRange { + NEGATIVE_HALF_AXIS = -1, + FULL_AXIS = 0, + POSITIVE_HALF_AXIS = 1 + }; + struct JoyEvent { int type; int index; - int value; + float value; }; - struct JoyDeviceMapping { + struct JoyBinding { + JoyType inputType; + union { + int button; + + struct { + int axis; + JoyAxisRange range; + bool invert; + } axis; + + struct { + int hat; + HatMask hat_mask; + } hat; + } input; + + JoyType outputType; + union { + JoyButtonList button; + + struct { + JoyAxisList axis; + JoyAxisRange range; + } axis; + + } output; + }; + + struct JoyDeviceMapping { String uid; String name; - Map<int, JoyEvent> buttons; - Map<int, JoyEvent> axis; - JoyEvent hat[HAT_MAX]; + Vector<JoyBinding> bindings; }; - JoyEvent hat_map_default[HAT_MAX]; - Vector<JoyDeviceMapping> map_db; - JoyEvent _find_to_event(String p_to); + JoyEvent _get_mapped_button_event(const JoyDeviceMapping &mapping, int p_button); + JoyEvent _get_mapped_axis_event(const JoyDeviceMapping &mapping, int p_axis, const JoyAxis &p_value); + void _get_mapped_hat_events(const JoyDeviceMapping &mapping, int p_hat, JoyEvent r_events[HAT_MAX]); + JoyButtonList _get_output_button(String output); + JoyAxisList _get_output_axis(String output); void _button_event(int p_device, int p_index, bool p_pressed); void _axis_event(int p_device, int p_axis, float p_value); float _handle_deadzone(int p_device, int p_axis, float p_value); |