瀏覽代碼

Input: Throw error if action doesn't exist

Thow errors if requesting an unexisting InputMap action.
Makes `Input.is_action_*` methods consistents with `Event.is_action_*` which already throw errors.

fixes #33303

(cherry picked from commit 2aee71d52dc687c8f8be1807436875eb83f7d4fb)
Liz Haas 5 年之前
父節點
當前提交
8a1f8a68fb
共有 1 個文件被更改,包括 16 次插入3 次删除
  1. 16 3
      main/input_default.cpp

+ 16 - 3
main/input_default.cpp

@@ -97,12 +97,18 @@ bool InputDefault::is_joy_button_pressed(int p_device, int p_button) const {
 }
 }
 
 
 bool InputDefault::is_action_pressed(const StringName &p_action) const {
 bool InputDefault::is_action_pressed(const StringName &p_action) const {
-
+#ifdef DEBUG_ENABLED
+	bool has_action = InputMap::get_singleton()->has_action(p_action);
+	ERR_FAIL_COND_V_MSG(!has_action, false, "Request for nonexistent InputMap action '" + String(p_action) + "'.");
+#endif
 	return action_state.has(p_action) && action_state[p_action].pressed;
 	return action_state.has(p_action) && action_state[p_action].pressed;
 }
 }
 
 
 bool InputDefault::is_action_just_pressed(const StringName &p_action) const {
 bool InputDefault::is_action_just_pressed(const StringName &p_action) const {
-
+#ifdef DEBUG_ENABLED
+	bool has_action = InputMap::get_singleton()->has_action(p_action);
+	ERR_FAIL_COND_V_MSG(!has_action, false, "Request for nonexistent InputMap action '" + String(p_action) + "'.");
+#endif
 	const Map<StringName, Action>::Element *E = action_state.find(p_action);
 	const Map<StringName, Action>::Element *E = action_state.find(p_action);
 	if (!E)
 	if (!E)
 		return false;
 		return false;
@@ -115,7 +121,10 @@ bool InputDefault::is_action_just_pressed(const StringName &p_action) const {
 }
 }
 
 
 bool InputDefault::is_action_just_released(const StringName &p_action) const {
 bool InputDefault::is_action_just_released(const StringName &p_action) const {
-
+#ifdef DEBUG_ENABLED
+	bool has_action = InputMap::get_singleton()->has_action(p_action);
+	ERR_FAIL_COND_V_MSG(!has_action, false, "Request for nonexistent InputMap action '" + String(p_action) + "'.");
+#endif
 	const Map<StringName, Action>::Element *E = action_state.find(p_action);
 	const Map<StringName, Action>::Element *E = action_state.find(p_action);
 	if (!E)
 	if (!E)
 		return false;
 		return false;
@@ -128,6 +137,10 @@ bool InputDefault::is_action_just_released(const StringName &p_action) const {
 }
 }
 
 
 float InputDefault::get_action_strength(const StringName &p_action) const {
 float InputDefault::get_action_strength(const StringName &p_action) const {
+#ifdef DEBUG_ENABLED
+	bool has_action = InputMap::get_singleton()->has_action(p_action);
+	ERR_FAIL_COND_V_MSG(!has_action, false, "Request for nonexistent InputMap action '" + String(p_action) + "'.");
+#endif
 	const Map<StringName, Action>::Element *E = action_state.find(p_action);
 	const Map<StringName, Action>::Element *E = action_state.find(p_action);
 	if (!E)
 	if (!E)
 		return 0.0f;
 		return 0.0f;