Adding InputMap action error suggestion for Input singleton
(cherry picked from commit a3b9842616
)
This commit is contained in:
parent
415b7a7bfc
commit
e7dac5da41
|
@ -59,7 +59,7 @@ void InputMap::_bind_methods() {
|
||||||
* Returns an nonexistent action error message with a suggestion of the closest
|
* Returns an nonexistent action error message with a suggestion of the closest
|
||||||
* matching action name (if possible).
|
* matching action name (if possible).
|
||||||
*/
|
*/
|
||||||
String InputMap::_suggest_actions(const StringName &p_action) const {
|
String InputMap::suggest_actions(const StringName &p_action) const {
|
||||||
List<StringName> actions = get_actions();
|
List<StringName> actions = get_actions();
|
||||||
StringName closest_action;
|
StringName closest_action;
|
||||||
float closest_similarity = 0.0;
|
float closest_similarity = 0.0;
|
||||||
|
@ -93,7 +93,7 @@ void InputMap::add_action(const StringName &p_action, float p_deadzone) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void InputMap::erase_action(const StringName &p_action) {
|
void InputMap::erase_action(const StringName &p_action) {
|
||||||
ERR_FAIL_COND_MSG(!input_map.has(p_action), _suggest_actions(p_action));
|
ERR_FAIL_COND_MSG(!input_map.has(p_action), suggest_actions(p_action));
|
||||||
|
|
||||||
input_map.erase(p_action);
|
input_map.erase(p_action);
|
||||||
}
|
}
|
||||||
|
@ -152,20 +152,20 @@ bool InputMap::has_action(const StringName &p_action) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
float InputMap::action_get_deadzone(const StringName &p_action) {
|
float InputMap::action_get_deadzone(const StringName &p_action) {
|
||||||
ERR_FAIL_COND_V_MSG(!input_map.has(p_action), 0.0f, _suggest_actions(p_action));
|
ERR_FAIL_COND_V_MSG(!input_map.has(p_action), 0.0f, suggest_actions(p_action));
|
||||||
|
|
||||||
return input_map[p_action].deadzone;
|
return input_map[p_action].deadzone;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InputMap::action_set_deadzone(const StringName &p_action, float p_deadzone) {
|
void InputMap::action_set_deadzone(const StringName &p_action, float p_deadzone) {
|
||||||
ERR_FAIL_COND_MSG(!input_map.has(p_action), _suggest_actions(p_action));
|
ERR_FAIL_COND_MSG(!input_map.has(p_action), suggest_actions(p_action));
|
||||||
|
|
||||||
input_map[p_action].deadzone = p_deadzone;
|
input_map[p_action].deadzone = p_deadzone;
|
||||||
}
|
}
|
||||||
|
|
||||||
void InputMap::action_add_event(const StringName &p_action, const Ref<InputEvent> &p_event) {
|
void InputMap::action_add_event(const StringName &p_action, const Ref<InputEvent> &p_event) {
|
||||||
ERR_FAIL_COND_MSG(p_event.is_null(), "It's not a reference to a valid InputEvent object.");
|
ERR_FAIL_COND_MSG(p_event.is_null(), "It's not a reference to a valid InputEvent object.");
|
||||||
ERR_FAIL_COND_MSG(!input_map.has(p_action), _suggest_actions(p_action));
|
ERR_FAIL_COND_MSG(!input_map.has(p_action), suggest_actions(p_action));
|
||||||
|
|
||||||
if (_find_event(input_map[p_action], p_event, true)) {
|
if (_find_event(input_map[p_action], p_event, true)) {
|
||||||
return; // Already added.
|
return; // Already added.
|
||||||
|
@ -175,13 +175,13 @@ void InputMap::action_add_event(const StringName &p_action, const Ref<InputEvent
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InputMap::action_has_event(const StringName &p_action, const Ref<InputEvent> &p_event) {
|
bool InputMap::action_has_event(const StringName &p_action, const Ref<InputEvent> &p_event) {
|
||||||
ERR_FAIL_COND_V_MSG(!input_map.has(p_action), false, _suggest_actions(p_action));
|
ERR_FAIL_COND_V_MSG(!input_map.has(p_action), false, suggest_actions(p_action));
|
||||||
|
|
||||||
return (_find_event(input_map[p_action], p_event, true) != nullptr);
|
return (_find_event(input_map[p_action], p_event, true) != nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
void InputMap::action_erase_event(const StringName &p_action, const Ref<InputEvent> &p_event) {
|
void InputMap::action_erase_event(const StringName &p_action, const Ref<InputEvent> &p_event) {
|
||||||
ERR_FAIL_COND_MSG(!input_map.has(p_action), _suggest_actions(p_action));
|
ERR_FAIL_COND_MSG(!input_map.has(p_action), suggest_actions(p_action));
|
||||||
|
|
||||||
List<Ref<InputEvent>>::Element *E = _find_event(input_map[p_action], p_event, true);
|
List<Ref<InputEvent>>::Element *E = _find_event(input_map[p_action], p_event, true);
|
||||||
if (E) {
|
if (E) {
|
||||||
|
@ -193,7 +193,7 @@ void InputMap::action_erase_event(const StringName &p_action, const Ref<InputEve
|
||||||
}
|
}
|
||||||
|
|
||||||
void InputMap::action_erase_events(const StringName &p_action) {
|
void InputMap::action_erase_events(const StringName &p_action) {
|
||||||
ERR_FAIL_COND_MSG(!input_map.has(p_action), _suggest_actions(p_action));
|
ERR_FAIL_COND_MSG(!input_map.has(p_action), suggest_actions(p_action));
|
||||||
|
|
||||||
input_map[p_action].inputs.clear();
|
input_map[p_action].inputs.clear();
|
||||||
}
|
}
|
||||||
|
@ -225,7 +225,7 @@ bool InputMap::event_is_action(const Ref<InputEvent> &p_event, const StringName
|
||||||
|
|
||||||
bool InputMap::event_get_action_status(const Ref<InputEvent> &p_event, const StringName &p_action, bool p_exact_match, bool *p_pressed, float *p_strength, float *p_raw_strength) const {
|
bool InputMap::event_get_action_status(const Ref<InputEvent> &p_event, const StringName &p_action, bool p_exact_match, bool *p_pressed, float *p_strength, float *p_raw_strength) const {
|
||||||
Map<StringName, Action>::Element *E = input_map.find(p_action);
|
Map<StringName, Action>::Element *E = input_map.find(p_action);
|
||||||
ERR_FAIL_COND_V_MSG(!E, false, _suggest_actions(p_action));
|
ERR_FAIL_COND_V_MSG(!E, false, suggest_actions(p_action));
|
||||||
|
|
||||||
Ref<InputEventAction> input_event_action = p_event;
|
Ref<InputEventAction> input_event_action = p_event;
|
||||||
if (input_event_action.is_valid()) {
|
if (input_event_action.is_valid()) {
|
||||||
|
|
|
@ -58,7 +58,6 @@ private:
|
||||||
|
|
||||||
Array _get_action_list(const StringName &p_action);
|
Array _get_action_list(const StringName &p_action);
|
||||||
Array _get_actions();
|
Array _get_actions();
|
||||||
String _suggest_actions(const StringName &p_action) const;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
static void _bind_methods();
|
static void _bind_methods();
|
||||||
|
@ -86,6 +85,8 @@ public:
|
||||||
void load_from_globals();
|
void load_from_globals();
|
||||||
void load_default();
|
void load_default();
|
||||||
|
|
||||||
|
String suggest_actions(const StringName &p_action) const;
|
||||||
|
|
||||||
InputMap();
|
InputMap();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -91,18 +91,12 @@ bool InputDefault::is_joy_button_pressed(int p_device, int p_button) const {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InputDefault::is_action_pressed(const StringName &p_action, bool p_exact) const {
|
bool InputDefault::is_action_pressed(const StringName &p_action, bool p_exact) const {
|
||||||
#ifdef DEBUG_ENABLED
|
ERR_FAIL_COND_V_MSG(!InputMap::get_singleton()->has_action(p_action), false, InputMap::get_singleton()->suggest_actions(p_action));
|
||||||
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 && (p_exact ? action_state[p_action].exact : true);
|
return action_state.has(p_action) && action_state[p_action].pressed && (p_exact ? action_state[p_action].exact : true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InputDefault::is_action_just_pressed(const StringName &p_action, bool p_exact) const {
|
bool InputDefault::is_action_just_pressed(const StringName &p_action, bool p_exact) const {
|
||||||
#ifdef DEBUG_ENABLED
|
ERR_FAIL_COND_V_MSG(!InputMap::get_singleton()->has_action(p_action), false, InputMap::get_singleton()->suggest_actions(p_action));
|
||||||
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;
|
||||||
|
@ -120,10 +114,7 @@ bool InputDefault::is_action_just_pressed(const StringName &p_action, bool p_exa
|
||||||
}
|
}
|
||||||
|
|
||||||
bool InputDefault::is_action_just_released(const StringName &p_action, bool p_exact) const {
|
bool InputDefault::is_action_just_released(const StringName &p_action, bool p_exact) const {
|
||||||
#ifdef DEBUG_ENABLED
|
ERR_FAIL_COND_V_MSG(!InputMap::get_singleton()->has_action(p_action), false, InputMap::get_singleton()->suggest_actions(p_action));
|
||||||
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;
|
||||||
|
@ -141,10 +132,7 @@ bool InputDefault::is_action_just_released(const StringName &p_action, bool p_ex
|
||||||
}
|
}
|
||||||
|
|
||||||
float InputDefault::get_action_strength(const StringName &p_action, bool p_exact) const {
|
float InputDefault::get_action_strength(const StringName &p_action, bool p_exact) const {
|
||||||
#ifdef DEBUG_ENABLED
|
ERR_FAIL_COND_V_MSG(!InputMap::get_singleton()->has_action(p_action), 0.0, InputMap::get_singleton()->suggest_actions(p_action));
|
||||||
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;
|
||||||
|
@ -158,10 +146,7 @@ float InputDefault::get_action_strength(const StringName &p_action, bool p_exact
|
||||||
}
|
}
|
||||||
|
|
||||||
float InputDefault::get_action_raw_strength(const StringName &p_action, bool p_exact) const {
|
float InputDefault::get_action_raw_strength(const StringName &p_action, bool p_exact) const {
|
||||||
#ifdef DEBUG_ENABLED
|
ERR_FAIL_COND_V_MSG(!InputMap::get_singleton()->has_action(p_action), 0.0, InputMap::get_singleton()->suggest_actions(p_action));
|
||||||
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;
|
||||||
|
|
Loading…
Reference in New Issue