diff options
author | Juan Linietsky <reduzio@gmail.com> | 2016-01-22 19:17:24 -0300 |
---|---|---|
committer | Juan Linietsky <reduzio@gmail.com> | 2016-01-22 19:17:24 -0300 |
commit | 84d7a559e5198478b1ae23d00dbd966461aadfe7 (patch) | |
tree | 8480de1917859c12d8c0b081c87190ae07d65244 /main | |
parent | 9d571d8eacb07e1b96de049feca976b3309cd21d (diff) | |
parent | ed3c73408b3b0ddf234ddcc5349fe85831e3ebba (diff) |
Merge branch 'master' of https://github.com/godotengine/godot
Diffstat (limited to 'main')
-rw-r--r-- | main/input_default.cpp | 45 | ||||
-rw-r--r-- | main/input_default.h | 4 |
2 files changed, 47 insertions, 2 deletions
diff --git a/main/input_default.cpp b/main/input_default.cpp index a79199580b..4e5d753ea9 100644 --- a/main/input_default.cpp +++ b/main/input_default.cpp @@ -478,6 +478,16 @@ static const char *s_ControllerMappings [] = #if defined(__ANDROID__) "4e564944494120436f72706f72617469,NVIDIA Controller,a:b0,b:b1,dpdown:h0.4,dpleft:h0.8,dpright:h0.2,dpup:h0.1,leftshoulder:b9,leftstick:b7,lefttrigger:a4,leftx:a0,lefty:a1,rightshoulder:b10,rightstick:b8,righttrigger:a5,rightx:a2,righty:a3,start:b6,x:b2,y:b3,", #endif + + #ifdef JAVASCRIPT_ENABLED + "Default HTML5 Gamepad, Default Mapping,leftx:a0,lefty:a1,dpdown:b13,rightstick:b11,rightshoulder:b5,rightx:a2,start:b9,righty:a3,dpleft:b14,lefttrigger:a6,x:b2,dpup:b12,back:b8,leftstick:b10,leftshoulder:b4,y:b3,a:b0,dpright:b15,righttrigger:a7,b:b1,", + "303534632d303236382d536f6e792050,PS3 Controller USB/Linux,leftx:a0,lefty:a1,dpdown:b6,rightstick:b2,rightshoulder:b11,rightx:a2,start:b3,righty:a3,dpleft:b7,lefttrigger:b8,x:b15,dpup:b4,back:b0,leftstick:b1,leftshoulder:b10,y:b12,a:b14,dpright:b5,righttrigger:b9,b:b13,", + "303534632d303563342d536f6e792043,PS4 Controller USB/Linux,leftx:a0,lefty:a1,dpdown:a7,rightstick:b11,rightshoulder:b5,rightx:a2,start:b9,righty:a5,dpleft:a6,lefttrigger:a3,x:b0,dpup:a7,back:b8,leftstick:b10,leftshoulder:b4,y:b3,a:b1,dpright:a6,righttrigger:a4,b:b2,", + "303534632d303563342d576972656c65,PS4 Controller USB/Win,leftx:a0,lefty:a1,dpdown:b15,rightstick:b11,rightshoulder:b5,rightx:a2,start:b9,righty:a5,lefttrigger:a3,x:b0,dpup:b14,dpleft:b16,dpright:b17,back:b8,leftstick:b10,leftshoulder:b4,y:b3,a:b1,righttrigger:b7,b:b2,", + "303435652d303238652d4d6963726f73,Wired X360 Controller,leftx:a0,lefty:a1,dpdown:a7,rightstick:b10,rightshoulder:b5,rightx:a3,start:b7,righty:a4,dpleft:a6,lefttrigger:a2,x:b2,dpup:a7,back:b6,leftstick:b9,leftshoulder:b4,y:b3,a:b0,dpright:a6,righttrigger:a5,b:b1,", + "303435652d303731392d58626f782033,Wireless X360 Controller,leftx:a0,lefty:a1,dpdown:b14,rightstick:b10,rightshoulder:b5,rightx:a3,start:b7,righty:a4,dpleft:b11,lefttrigger:a2,x:b2,dpup:b13,back:b6,leftstick:b9,leftshoulder:b4,y:b3,a:b0,dpright:b12,righttrigger:a5,b:b1,", + "c2a94d6963726f736f66742058626f78,Wireless X360 Controller,leftx:a0,lefty:a1,dpdown:b14,rightstick:b10,rightshoulder:b5,rightx:a3,start:b7,righty:a4,dpleft:b11,lefttrigger:a2,x:b2,dpup:b13,back:b6,leftstick:b9,leftshoulder:b4,y:b3,a:b0,dpright:b12,righttrigger:a5,b:b1,", + #endif NULL }; @@ -607,6 +617,41 @@ uint32_t InputDefault::joy_axis(uint32_t p_last_id, int p_device, int p_axis, co int axis = map.index == JOY_L2 ? JOY_ANALOG_L2 : JOY_ANALOG_R2; p_last_id = _axis_event(p_last_id, p_device, axis, value); } + + if (map.index == JOY_DPAD_UP || map.index == JOY_DPAD_DOWN) { + bool pressed = p_value.value != 0.0f; + int button = p_value.value < 0 ? JOY_DPAD_UP : JOY_DPAD_DOWN; + + if (!pressed) { + if (joy_buttons_pressed.has(_combine_device(JOY_DPAD_UP, p_device))) { + p_last_id = _button_event(p_last_id, p_device, JOY_DPAD_UP, false); + } + if (joy_buttons_pressed.has(_combine_device(JOY_DPAD_DOWN, p_device))) { + p_last_id = _button_event(p_last_id, p_device, JOY_DPAD_DOWN, false); + } + } + if ( pressed == joy_buttons_pressed.has(_combine_device(button, p_device))) { + return p_last_id; + } + return _button_event(p_last_id, p_device, button, true); + } + if (map.index == JOY_DPAD_LEFT || map.index == JOY_DPAD_RIGHT) { + bool pressed = p_value.value != 0.0f; + int button = p_value.value < 0 ? JOY_DPAD_LEFT : JOY_DPAD_RIGHT; + + if (!pressed) { + if (joy_buttons_pressed.has(_combine_device(JOY_DPAD_LEFT, p_device))) { + p_last_id = _button_event(p_last_id, p_device, JOY_DPAD_LEFT, false); + } + if (joy_buttons_pressed.has(_combine_device(JOY_DPAD_RIGHT, p_device))) { + p_last_id = _button_event(p_last_id, p_device, JOY_DPAD_RIGHT, false); + } + } + if ( pressed == joy_buttons_pressed.has(_combine_device(button, p_device))) { + return p_last_id; + } + return _button_event(p_last_id, p_device, button, true); + } float deadzone = p_value.min == 0 ? 0.5f : 0.0f; bool pressed = p_value.value > deadzone ? true : false; if (pressed == joy_buttons_pressed.has(_combine_device(map.index,p_device))) { diff --git a/main/input_default.h b/main/input_default.h index bbfd9ced2c..a75865e0cb 100644 --- a/main/input_default.h +++ b/main/input_default.h @@ -36,7 +36,7 @@ class InputDefault : public Input { struct Joystick { StringName name; StringName uid; - bool last_buttons[JOY_BUTTON_MAX]; + bool last_buttons[JOY_BUTTON_MAX + 2]; //html5 needs support for 18 buttons to map some devices correctly float last_axis[JOY_AXIS_MAX]; float filter; int last_hat; @@ -50,7 +50,7 @@ class InputDefault : public Input { last_axis[i] = 0.0f; } - for (int i = 0; i < JOY_BUTTON_MAX; i++) { + for (int i = 0; i < JOY_BUTTON_MAX + 2; i++) { last_buttons[i] = false; } |