mirror of
https://github.com/godotengine/godot.git
synced 2025-01-09 11:37:35 +00:00
Merge pull request #5559 from Hinsbart/connected_joysticks
Input: add get_connected_joysticks() method.
This commit is contained in:
commit
bba89aef3b
@ -59,6 +59,7 @@ void Input::_bind_methods() {
|
|||||||
ObjectTypeDB::bind_method(_MD("get_joy_axis","device","axis"),&Input::get_joy_axis);
|
ObjectTypeDB::bind_method(_MD("get_joy_axis","device","axis"),&Input::get_joy_axis);
|
||||||
ObjectTypeDB::bind_method(_MD("get_joy_name","device"),&Input::get_joy_name);
|
ObjectTypeDB::bind_method(_MD("get_joy_name","device"),&Input::get_joy_name);
|
||||||
ObjectTypeDB::bind_method(_MD("get_joy_guid","device"),&Input::get_joy_guid);
|
ObjectTypeDB::bind_method(_MD("get_joy_guid","device"),&Input::get_joy_guid);
|
||||||
|
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_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_vibration_duration", "device"), &Input::get_joy_vibration_duration);
|
||||||
ObjectTypeDB::bind_method(_MD("start_joy_vibration", "device", "weak_magnitude", "strong_magnitude", "duration"), &Input::start_joy_vibration, DEFVAL(0));
|
ObjectTypeDB::bind_method(_MD("start_joy_vibration", "device", "weak_magnitude", "strong_magnitude", "duration"), &Input::start_joy_vibration, DEFVAL(0));
|
||||||
|
@ -62,6 +62,7 @@ public:
|
|||||||
|
|
||||||
virtual float get_joy_axis(int p_device,int p_axis)=0;
|
virtual float get_joy_axis(int p_device,int p_axis)=0;
|
||||||
virtual String get_joy_name(int p_idx)=0;
|
virtual String get_joy_name(int p_idx)=0;
|
||||||
|
virtual Array get_connected_joysticks()=0;
|
||||||
virtual void joy_connection_changed(int p_idx, bool p_connected, String p_name, String p_guid)=0;
|
virtual void joy_connection_changed(int p_idx, bool p_connected, String p_name, String p_guid)=0;
|
||||||
virtual void add_joy_mapping(String p_mapping, bool p_update_existing=false)=0;
|
virtual void add_joy_mapping(String p_mapping, bool p_update_existing=false)=0;
|
||||||
virtual void remove_joy_mapping(String p_guid)=0;
|
virtual void remove_joy_mapping(String p_guid)=0;
|
||||||
|
@ -15759,6 +15759,13 @@
|
|||||||
If the device has an accelerometer, this will return the movement.
|
If the device has an accelerometer, this will return the movement.
|
||||||
</description>
|
</description>
|
||||||
</method>
|
</method>
|
||||||
|
<method name="get_connected_joysticks">
|
||||||
|
<return type="Array">
|
||||||
|
</return>
|
||||||
|
<description>
|
||||||
|
Returns an [Array] containing the device IDs of all currently connected joysticks.
|
||||||
|
</description>
|
||||||
|
</method>
|
||||||
<method name="get_joy_axis">
|
<method name="get_joy_axis">
|
||||||
<return type="float">
|
<return type="float">
|
||||||
</return>
|
</return>
|
||||||
|
@ -102,7 +102,7 @@ bool InputDefault::is_action_pressed(const StringName& p_action) {
|
|||||||
|
|
||||||
const List<InputEvent> *alist = InputMap::get_singleton()->get_action_list(p_action);
|
const List<InputEvent> *alist = InputMap::get_singleton()->get_action_list(p_action);
|
||||||
if (!alist)
|
if (!alist)
|
||||||
return NULL;
|
return false;
|
||||||
|
|
||||||
|
|
||||||
for (const List<InputEvent>::Element *E=alist->front();E;E=E->next()) {
|
for (const List<InputEvent>::Element *E=alist->front();E;E=E->next()) {
|
||||||
@ -221,18 +221,18 @@ void InputDefault::joy_connection_changed(int p_idx, bool p_connected, String p_
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
js.uid = uidname;
|
js.uid = uidname;
|
||||||
//printf("looking for mappings for guid %ls\n", uidname.c_str());
|
js.connected = true;
|
||||||
int mapping = fallback_mapping;
|
int mapping = fallback_mapping;
|
||||||
for (int i=0; i < map_db.size(); i++) {
|
for (int i=0; i < map_db.size(); i++) {
|
||||||
if (js.uid == map_db[i].uid) {
|
if (js.uid == map_db[i].uid) {
|
||||||
mapping = i;
|
mapping = i;
|
||||||
js.name = map_db[i].name;
|
js.name = map_db[i].name;
|
||||||
//printf("found mapping\n");
|
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
js.mapping = mapping;
|
js.mapping = mapping;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
js.connected = false;
|
||||||
for (int i = 0; i < JOY_BUTTON_MAX; i++) {
|
for (int i = 0; i < JOY_BUTTON_MAX; i++) {
|
||||||
|
|
||||||
if (i < JOY_AXIS_MAX)
|
if (i < JOY_AXIS_MAX)
|
||||||
@ -1042,3 +1042,15 @@ bool InputDefault::is_joy_mapped(int p_device) {
|
|||||||
String InputDefault::get_joy_guid_remapped(int p_device) const {
|
String InputDefault::get_joy_guid_remapped(int p_device) const {
|
||||||
return joy_names[p_device].uid;
|
return joy_names[p_device].uid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Array InputDefault::get_connected_joysticks() {
|
||||||
|
Array ret;
|
||||||
|
Map<int, Joystick>::Element *elem = joy_names.front();
|
||||||
|
while (elem) {
|
||||||
|
if (elem->get().connected) {
|
||||||
|
ret.push_back(elem->key());
|
||||||
|
}
|
||||||
|
elem = elem->next();
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
@ -75,6 +75,7 @@ class InputDefault : public Input {
|
|||||||
struct Joystick {
|
struct Joystick {
|
||||||
StringName name;
|
StringName name;
|
||||||
StringName uid;
|
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 + 19]; //apparently SDL specifies 35 possible buttons on android
|
||||||
float last_axis[JOY_AXIS_MAX];
|
float last_axis[JOY_AXIS_MAX];
|
||||||
float filter;
|
float filter;
|
||||||
@ -93,6 +94,7 @@ class InputDefault : public Input {
|
|||||||
|
|
||||||
last_buttons[i] = false;
|
last_buttons[i] = false;
|
||||||
}
|
}
|
||||||
|
connected = false;
|
||||||
last_hat = HAT_MASK_CENTER;
|
last_hat = HAT_MASK_CENTER;
|
||||||
filter = 0.01f;
|
filter = 0.01f;
|
||||||
mapping = -1;
|
mapping = -1;
|
||||||
@ -168,6 +170,7 @@ public:
|
|||||||
|
|
||||||
virtual float get_joy_axis(int p_device,int p_axis);
|
virtual float get_joy_axis(int p_device,int p_axis);
|
||||||
String get_joy_name(int p_idx);
|
String get_joy_name(int p_idx);
|
||||||
|
virtual Array get_connected_joysticks();
|
||||||
virtual Vector2 get_joy_vibration_strength(int p_device);
|
virtual Vector2 get_joy_vibration_strength(int p_device);
|
||||||
virtual float get_joy_vibration_duration(int p_device);
|
virtual float get_joy_vibration_duration(int p_device);
|
||||||
virtual uint64_t get_joy_vibration_timestamp(int p_device);
|
virtual uint64_t get_joy_vibration_timestamp(int p_device);
|
||||||
|
Loading…
Reference in New Issue
Block a user