From 285bcac224b045fef967c2a741240e5fa842cb08 Mon Sep 17 00:00:00 2001 From: hondres Date: Sun, 24 Jan 2016 18:01:37 +0100 Subject: [PATCH] can use fallback mapping on all platforms --- main/input_default.cpp | 31 +++++++++++++++++-------------- main/input_default.h | 4 ++-- platform/android/os_android.cpp | 2 +- 3 files changed, 20 insertions(+), 17 deletions(-) diff --git a/main/input_default.cpp b/main/input_default.cpp index bafc227fb27..51a6292b889 100644 --- a/main/input_default.cpp +++ b/main/input_default.cpp @@ -157,19 +157,13 @@ void InputDefault::joy_connection_changed(int p_idx, bool p_connected, String p_ }; js.uid = uidname; //printf("looking for mappings for guid %ls\n", uidname.c_str()); - int mapping = -1; + int mapping = fallback_mapping; for (int i=0; i < map_db.size(); i++) { if (js.uid == map_db[i].uid) { mapping = i; //printf("found mapping\n"); }; }; -#ifdef ANDROID_ENABLED - //Use a default mapping for Android, as we recieve events using indices of a SDL_GAMECONTROLLER. - //So we need to map those to our own joystick layout - if (mapping == -1) - mapping = 0; -#endif js.mapping = mapping; }; joy_names[p_idx] = js; @@ -519,10 +513,8 @@ InputDefault::InputDefault() { hat_map_default[HAT_LEFT].index = JOY_DPAD_LEFT; hat_map_default[HAT_LEFT].value = 0; -#ifdef ANDROID_ENABLED - //add the default mapping first, in case someone actually sets the env variable on their phone - parse_mapping("Default Android Gamepad,Default Controller,leftx:a0,lefty:a1,dpdown:h0.4,rightstick:b8,rightshoulder:b10,rightx:a2,start:b6,righty:a3,dpleft:h0.8,lefttrigger:a4,x:b2,dpup:h0.1,back:b4,leftstick:b7,leftshoulder:b9,y:b3,a:b0,dpright:h0.2,righttrigger:a5,b:b1,"); -#endif + fallback_mapping = -1; + String env_mapping = OS::get_singleton()->get_environment("SDL_GAMECONTROLLERCONFIG"); if (env_mapping != "") { @@ -875,10 +867,8 @@ String InputDefault::get_joy_guid(int p_device) const { //platforms that use the remapping system can override and call to these ones bool InputDefault::is_joy_mapped(int p_device) { -#ifdef ANDROID_ENABLED - if (joy_names[p_device].mapping == 0) + if (joy_names[p_device].mapping == fallback_mapping) return false; -#endif return joy_names[p_device].mapping != -1 ? true : false; } @@ -886,3 +876,16 @@ String InputDefault::get_joy_guid_remapped(int p_device) const { return joy_names[p_device].uid; } +void InputDefault::set_fallback_mapping(String p_mapping) { + + int prev_fallback = fallback_mapping; + parse_mapping(p_mapping); + fallback_mapping = map_db.size() -1; + + for (int i = 0; i < joy_names.size(); i++) { + if (joy_names[i].mapping == prev_fallback) { + joy_names[i].mapping = fallback_mapping; + } + } +} + diff --git a/main/input_default.h b/main/input_default.h index a417713a82c..7432a3715d4 100644 --- a/main/input_default.h +++ b/main/input_default.h @@ -18,7 +18,6 @@ class InputDefault : public Input { MainLoop *main_loop; bool emulate_touch; - struct SpeedTrack { uint64_t last_tick; @@ -62,6 +61,7 @@ class InputDefault : public Input { SpeedTrack mouse_speed_track; Map joy_names; + int fallback_mapping; RES custom_cursor; public: enum HatMask { @@ -169,7 +169,7 @@ public: bool is_joy_mapped(int p_device); String get_joy_guid_remapped(int p_device) const; - + void set_fallback_mapping(String p_mapping); InputDefault(); }; diff --git a/platform/android/os_android.cpp b/platform/android/os_android.cpp index c8a3f6d728b..c80284afcfe 100644 --- a/platform/android/os_android.cpp +++ b/platform/android/os_android.cpp @@ -178,7 +178,7 @@ void OS_Android::initialize(const VideoMode& p_desired,int p_video_driver,int p_ physics_2d_server->init(); input = memnew( InputDefault ); - + input->set_fallback_mapping("Default Android Gamepad,Default Controller,leftx:a0,lefty:a1,dpdown:h0.4,rightstick:b8,rightshoulder:b10,rightx:a2,start:b6,righty:a3,dpleft:h0.8,lefttrigger:a4,x:b2,dpup:h0.1,back:b4,leftstick:b7,leftshoulder:b9,y:b3,a:b0,dpright:h0.2,righttrigger:a5,b:b1,"); } void OS_Android::set_main_loop( MainLoop * p_main_loop ) {