Browse Source

Merge pull request #21954 from isaacremnant/fix_inputs

Fix is_action_pressed for InputEventActions
Rémi Verschelde 7 years ago
parent
commit
c9df3fbfdb
3 changed files with 22 additions and 0 deletions
  1. 4 0
      core/input_map.cpp
  2. 16 0
      core/os/input_event.cpp
  3. 2 0
      core/os/input_event.h

+ 4 - 0
core/input_map.cpp

@@ -199,6 +199,10 @@ bool InputMap::event_get_action_status(const Ref<InputEvent> &p_event, const Str
 
 	Ref<InputEventAction> input_event_action = p_event;
 	if (input_event_action.is_valid()) {
+		if (p_pressed != NULL)
+			*p_pressed = input_event_action->is_pressed();
+		if (p_strength != NULL)
+			*p_strength = (*p_pressed) ? 1.0f : 0.0f;
 		return input_event_action->get_action() == p_action;
 	}
 

+ 16 - 0
core/os/input_event.cpp

@@ -962,6 +962,22 @@ bool InputEventAction::is_action(const StringName &p_action) const {
 	return action == p_action;
 }
 
+bool InputEventAction::action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float p_deadzone) const {
+
+	Ref<InputEventAction> act = p_event;
+	if (act.is_null())
+		return false;
+
+	bool match = action == act->action;
+	if (match) {
+		if (p_pressed != NULL)
+			*p_pressed = act->pressed;
+		if (p_strength != NULL)
+			*p_strength = (*p_pressed) ? 1.0f : 0.0f;
+	}
+	return match;
+}
+
 String InputEventAction::as_text() const {
 
 	return "InputEventAction : action=" + action + ", pressed=(" + (pressed ? "true" : "false");

+ 2 - 0
core/os/input_event.h

@@ -481,6 +481,8 @@ public:
 
 	virtual bool is_action(const StringName &p_action) const;
 
+	virtual bool action_match(const Ref<InputEvent> &p_event, bool *p_pressed, float *p_strength, float p_deadzone) const;
+
 	virtual bool shortcut_match(const Ref<InputEvent> &p_event) const;
 	virtual bool is_action_type() const { return true; }
 	virtual String as_text() const;