summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorhondres <liu.gam3@gmail.com>2016-01-24 18:01:37 +0100
committerhondres <liu.gam3@gmail.com>2016-01-24 18:01:37 +0100
commit285bcac224b045fef967c2a741240e5fa842cb08 (patch)
treeb60e785009a1dd34771e3eaf52cfcbc56e81b40b
parente7c920fdbabd65a86864ec9610f895bee82f05ba (diff)
can use fallback mapping on all platforms
-rw-r--r--main/input_default.cpp31
-rw-r--r--main/input_default.h4
-rw-r--r--platform/android/os_android.cpp2
3 files changed, 20 insertions, 17 deletions
diff --git a/main/input_default.cpp b/main/input_default.cpp
index bafc227fb2..51a6292b88 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 a417713a82..7432a3715d 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<int, Joystick> 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 c8a3f6d728..c80284afcf 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 ) {