summaryrefslogtreecommitdiffstats
path: root/core/input_map.cpp
diff options
context:
space:
mode:
authorFabio Alessandrelli <fabio.alessandrelli@gmail.com>2017-01-25 20:37:39 +0100
committerFabio Alessandrelli <fabio.alessandrelli@gmail.com>2017-01-25 21:21:19 +0100
commit9100db7b941348854dafad7860a4e466dba31ae6 (patch)
treebd10541480320b32cd9c22c36078cdf841d595f7 /core/input_map.cpp
parentae258e2679bd9deda8b311d030771fab03303833 (diff)
downloadredot-engine-9100db7b941348854dafad7860a4e466dba31ae6.tar.gz
Keyboard Input modifiers do not block actions.
This means, if you press "F" while holding "shift" and there is and action registered for "F" that action should be pressed. This commit restore this behaviour, lost when implementing is_action_just_pressed. If you want "blocking modifiers" you should code it via script. Fixes 6826
Diffstat (limited to 'core/input_map.cpp')
-rw-r--r--core/input_map.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/core/input_map.cpp b/core/input_map.cpp
index 8473bce806..dcce13ba1b 100644
--- a/core/input_map.cpp
+++ b/core/input_map.cpp
@@ -107,7 +107,7 @@ List<StringName> InputMap::get_actions() const {
return actions;
}
-List<InputEvent>::Element *InputMap::_find_event(List<InputEvent> &p_list,const InputEvent& p_event, bool p_mod_ignore=false) const {
+List<InputEvent>::Element *InputMap::_find_event(List<InputEvent> &p_list,const InputEvent& p_event, bool p_action_test) const {
for (List<InputEvent>::Element *E=p_list.front();E;E=E->next()) {
@@ -123,7 +123,13 @@ List<InputEvent>::Element *InputMap::_find_event(List<InputEvent> &p_list,const
case InputEvent::KEY: {
- same=(e.key.scancode==p_event.key.scancode && (p_mod_ignore || e.key.mod == p_event.key.mod));
+ if(p_action_test) {
+ uint32_t code = e.key.get_scancode_with_modifiers();
+ uint32_t event_code = p_event.key.get_scancode_with_modifiers();
+ same=(e.key.scancode==p_event.key.scancode && (!p_event.key.pressed || ((code & event_code) == code)));
+ } else {
+ same=(e.key.scancode==p_event.key.scancode && e.key.mod == p_event.key.mod);
+ }
} break;
case InputEvent::JOYPAD_BUTTON: {
@@ -230,7 +236,7 @@ bool InputMap::event_is_action(const InputEvent& p_event, const StringName& p_ac
return p_event.action.action==E->get().id;
}
- return _find_event(E->get().inputs,p_event,!p_event.is_pressed())!=NULL;
+ return _find_event(E->get().inputs,p_event,true)!=NULL;
}
const Map<StringName, InputMap::Action>& InputMap::get_action_map() const {