Browse Source

Merge pull request #6568 from Hinsbart/joy_names

Add functions to get readable names for joystick events
Rémi Verschelde 9 years ago
parent
commit
73a7b91459
4 changed files with 72 additions and 0 deletions
  1. 4 0
      core/os/input.cpp
  2. 5 0
      core/os/input.h
  3. 58 0
      main/input_default.cpp
  4. 5 0
      main/input_default.h

+ 4 - 0
core/os/input.cpp

@@ -64,6 +64,10 @@ void Input::_bind_methods() {
 	ObjectTypeDB::bind_method(_MD("get_connected_joysticks"),&Input::get_connected_joysticks);
 	ObjectTypeDB::bind_method(_MD("get_joy_vibration_strength", "device"), &Input::get_joy_vibration_strength);
 	ObjectTypeDB::bind_method(_MD("get_joy_vibration_duration", "device"), &Input::get_joy_vibration_duration);
+	ObjectTypeDB::bind_method(_MD("get_joy_button_string", "button_index"), &Input::get_joy_button_string);
+	ObjectTypeDB::bind_method(_MD("get_joy_button_index_from_string", "button"), &Input::get_joy_button_index_from_string);
+	ObjectTypeDB::bind_method(_MD("get_joy_axis_string", "axis_index"), &Input::get_joy_axis_string);
+	ObjectTypeDB::bind_method(_MD("get_joy_axis_index_from_string", "axis"), &Input::get_joy_axis_index_from_string);
 	ObjectTypeDB::bind_method(_MD("start_joy_vibration", "device", "weak_magnitude", "strong_magnitude", "duration"), &Input::start_joy_vibration, DEFVAL(0));
 	ObjectTypeDB::bind_method(_MD("stop_joy_vibration", "device"), &Input::stop_joy_vibration);
 	ObjectTypeDB::bind_method(_MD("get_accelerometer"),&Input::get_accelerometer);

+ 5 - 0
core/os/input.h

@@ -96,6 +96,11 @@ public:
 	virtual void set_custom_mouse_cursor(const RES& p_cursor,const Vector2& p_hotspot=Vector2())=0;
 	virtual void set_mouse_in_window(bool p_in_window)=0;
 
+	virtual String get_joy_button_string(int p_button)=0;
+	virtual String get_joy_axis_string(int p_axis)=0;
+	virtual int    get_joy_button_index_from_string(String p_button)=0;
+	virtual int    get_joy_axis_index_from_string(String p_axis)=0;
+
 	Input();
 };
 

+ 58 - 0
main/input_default.cpp

@@ -1159,3 +1159,61 @@ Array InputDefault::get_connected_joysticks() {
 	}
 	return ret;
 }
+
+static const char* _buttons[] = {
+	"Face Button Bottom",
+	"Face Button Right",
+	"Face Button Left",
+	"Face Button Top",
+	"L",
+	"R",
+	"L2",
+	"R2",
+	"L3",
+	"R3",
+	"Select",
+	"Start",
+	"DPAD Up",
+	"DPAD Down",
+	"DPAD Left",
+	"DPAD Right"
+};
+
+static const char* _axes[] = {
+	"Left Stick X",
+	"Left Stick Y",
+	"Right Stick X",
+	"Right Stick Y",
+	"",
+	"",
+	"L2",
+	"R2"
+};
+
+String InputDefault::get_joy_button_string(int p_button) {
+	ERR_FAIL_INDEX_V(p_button, JOY_BUTTON_MAX, "");
+	return _buttons[p_button];
+}
+
+int InputDefault::get_joy_button_index_from_string(String p_button) {
+	for (int i = 0; i < JOY_BUTTON_MAX; i++) {
+		if (p_button == _buttons[i]) {
+			return i;
+		}
+	}
+	ERR_FAIL_V(-1);
+}
+
+String InputDefault::get_joy_axis_string(int p_axis) {
+	ERR_FAIL_INDEX_V(p_axis, JOY_AXIS_MAX, "");
+	return _axes[p_axis];
+}
+
+int InputDefault::get_joy_axis_index_from_string(String p_axis) {
+	for (int i = 0; i < JOY_AXIS_MAX; i++) {
+		if (p_axis == _axes[i]) {
+			return i;
+		}
+	}
+	ERR_FAIL_V(-1);
+}

+ 5 - 0
main/input_default.h

@@ -235,6 +235,11 @@ public:
 	virtual bool is_joy_known(int p_device);
 	virtual String get_joy_guid(int p_device) const;
 
+	virtual String get_joy_button_string(int p_button);
+	virtual String get_joy_axis_string(int p_axis);
+	virtual int    get_joy_axis_index_from_string(String p_axis);
+	virtual int    get_joy_button_index_from_string(String p_button);
+
 	bool is_joy_mapped(int p_device);
 	String get_joy_guid_remapped(int p_device) const;
 	void set_fallback_mapping(String p_guid);