summaryrefslogtreecommitdiffstats
path: root/core/input/input_map.cpp
diff options
context:
space:
mode:
authorMicky <micheledevita2@gmail.com>2024-01-03 22:41:52 +0100
committerMicky <micheledevita2@gmail.com>2024-03-01 16:44:26 +0100
commit70b428041b88e30c0451e2b64aad7a936020c166 (patch)
treef4c7b5680be944b7fda9ad94ee7ab65923bf05ec /core/input/input_map.cpp
parent8e951fd0a92c551f260c3272039181be32121a32 (diff)
downloadredot-engine-70b428041b88e30c0451e2b64aad7a936020c166.tar.gz
Add autocompletion for InputMap's methods
Diffstat (limited to 'core/input/input_map.cpp')
-rw-r--r--core/input/input_map.cpp29
1 files changed, 29 insertions, 0 deletions
diff --git a/core/input/input_map.cpp b/core/input/input_map.cpp
index 70041ecfd6..5d6de1ad9a 100644
--- a/core/input/input_map.cpp
+++ b/core/input/input_map.cpp
@@ -85,6 +85,35 @@ String InputMap::suggest_actions(const StringName &p_action) const {
return error_message;
}
+#ifdef TOOLS_ENABLED
+void InputMap::get_argument_options(const StringName &p_function, int p_idx, List<String> *r_options) const {
+ const String pf = p_function;
+ bool first_argument_is_action = false;
+ if (p_idx == 0) {
+ first_argument_is_action = (pf == "has_action" || pf == "erase_action" ||
+ pf == "action_set_deadzone" || pf == "action_get_deadzone" ||
+ pf == "action_has_event" || pf == "action_add_event" || pf == "action_get_events" ||
+ pf == "action_erase_event" || pf == "action_erase_events");
+ }
+ if (first_argument_is_action || (p_idx == 1 && pf == "event_is_action")) {
+ // Cannot rely on `get_actions()`, otherwise the actions would be in the context of the Editor (no user-defined actions).
+ List<PropertyInfo> pinfo;
+ ProjectSettings::get_singleton()->get_property_list(&pinfo);
+
+ for (const PropertyInfo &pi : pinfo) {
+ if (!pi.name.begins_with("input/")) {
+ continue;
+ }
+
+ String name = pi.name.substr(pi.name.find("/") + 1, pi.name.length());
+ r_options->push_back(name.quote());
+ }
+ }
+
+ Object::get_argument_options(p_function, p_idx, r_options);
+}
+#endif
+
void InputMap::add_action(const StringName &p_action, float p_deadzone) {
ERR_FAIL_COND_MSG(input_map.has(p_action), "InputMap already has action \"" + String(p_action) + "\".");
input_map[p_action] = Action();