diff options
| author | punto- | 2016-01-12 03:59:19 -0300 |
|---|---|---|
| committer | punto- | 2016-01-12 03:59:19 -0300 |
| commit | 7393e404521350cbb3e69ce87a19ee602ec2a7a4 (patch) | |
| tree | 2c0b71bce28a0bbbbd448084b80bc602183e19b0 /main | |
| parent | 8cb013a1bf4728853851d0cbcbc963754632d330 (diff) | |
| parent | c632c13c66db715b816390f0734f2b1839a7ff3e (diff) | |
| download | godot-7393e404521350cbb3e69ce87a19ee602ec2a7a4.tar.gz godot-7393e404521350cbb3e69ce87a19ee602ec2a7a4.tar.zst godot-7393e404521350cbb3e69ce87a19ee602ec2a7a4.zip | |
Merge pull request #3272 from Hinsbart/joy-binding
Add some joystick functions to input. Enables manipulation of mapping…
Diffstat (limited to 'main')
| -rw-r--r-- | main/input_default.cpp | 46 | ||||
| -rw-r--r-- | main/input_default.h | 9 |
2 files changed, 55 insertions, 0 deletions
diff --git a/main/input_default.cpp b/main/input_default.cpp index 68f7434d9..a79199580 100644 --- a/main/input_default.cpp +++ b/main/input_default.cpp @@ -781,3 +781,49 @@ void InputDefault::parse_mapping(String p_mapping) { map_db.push_back(mapping); //printf("added mapping with uuid %ls\n", mapping.uid.c_str()); }; + +void InputDefault::add_joy_mapping(String p_mapping, bool p_update_existing) { + parse_mapping(p_mapping); + if (p_update_existing) { + Vector<String> entry = p_mapping.split(","); + String uid = entry[0]; + for (int i=0; i<joy_names.size(); i++) { + if (uid == joy_names[i].uid) { + joy_names[i].mapping = map_db.size() -1; + } + } + } +} + +void InputDefault::remove_joy_mapping(String p_guid) { + for (int i=map_db.size()-1; i >= 0;i--) { + if (p_guid == map_db[i].uid) { + map_db.remove(i); + } + } + for (int i=0; i<joy_names.size(); i++) { + if (joy_names[i].uid == p_guid) { + joy_names[i].mapping = -1; + } + } +} + +//Defaults to simple implementation for platforms with a fixed gamepad layout, like consoles. +bool InputDefault::is_joy_known(int p_device) { + + return OS::get_singleton()->is_joy_known(p_device); +} + +String InputDefault::get_joy_guid(int p_device) const { + return OS::get_singleton()->get_joy_guid(p_device); +} + +//platforms that use the remapping system can override and call to these ones +bool InputDefault::is_joy_mapped(int p_device) { + return joy_names[p_device].mapping != -1 ? true : false; +} + +String InputDefault::get_joy_guid_remapped(int p_device) const { + return joy_names[p_device].uid; +} + diff --git a/main/input_default.h b/main/input_default.h index 6645817b3..bbfd9ced2 100644 --- a/main/input_default.h +++ b/main/input_default.h @@ -56,6 +56,7 @@ class InputDefault : public Input { } last_hat = HAT_MASK_CENTER; filter = 0.01f; + mapping = -1; } }; @@ -161,6 +162,14 @@ public: uint32_t joy_axis(uint32_t p_last_id, int p_device, int p_axis, const JoyAxis& p_value); uint32_t joy_hat(uint32_t p_last_id, int p_device, int p_val); + virtual void add_joy_mapping(String p_mapping, bool p_update_existing=false); + virtual void remove_joy_mapping(String p_guid); + virtual bool is_joy_known(int p_device); + virtual String get_joy_guid(int p_device) const; + + bool is_joy_mapped(int p_device); + String get_joy_guid_remapped(int p_device) const; + InputDefault(); }; |
