summaryrefslogtreecommitdiff
path: root/src/input/inputmanager.cpp
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2014-01-11 12:24:18 +0300
committerAndrei Karas <akaras@inbox.ru>2014-01-11 12:24:18 +0300
commita154e6e99dfc72636770920f497d57c278b96996 (patch)
treeac56e36ace297bbfae1e60516103b1d23c8c35ba /src/input/inputmanager.cpp
parent9306c6f2671a89fe84d1eb35d54550e58dd74d49 (diff)
downloadmv-a154e6e99dfc72636770920f497d57c278b96996.tar.gz
mv-a154e6e99dfc72636770920f497d57c278b96996.tar.bz2
mv-a154e6e99dfc72636770920f497d57c278b96996.tar.xz
mv-a154e6e99dfc72636770920f497d57c278b96996.zip
Block moving character by arrow keys in buy/sell dialogs.
Check repeat keys for action condition.
Diffstat (limited to 'src/input/inputmanager.cpp')
-rw-r--r--src/input/inputmanager.cpp26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/input/inputmanager.cpp b/src/input/inputmanager.cpp
index 2bc0786fb..383362eed 100644
--- a/src/input/inputmanager.cpp
+++ b/src/input/inputmanager.cpp
@@ -38,10 +38,12 @@
#include "gui/widgets/tabs/setup_input.h"
+#include "gui/windows/buydialog.h"
#include "gui/windows/chatwindow.h"
#include "gui/windows/inventorywindow.h"
#include "gui/windows/npcdialog.h"
#include "gui/windows/npcpostdialog.h"
+#include "gui/windows/selldialog.h"
#include "gui/windows/setup.h"
#include "gui/windows/textdialog.h"
#include "gui/windows/tradewindow.h"
@@ -332,7 +334,18 @@ void InputManager::callbackNewKey()
mSetupInput->newKeyCallback(mNewKeyIndex);
}
-bool InputManager::isActionActive(const int index)
+bool InputManager::isActionActive(const int index) const
+{
+ if (!isActionActive0(index))
+ return false;
+
+ const KeyData &key = keyData[index];
+ if ((key.condition & mMask) != key.condition)
+ return false;
+ return true;
+}
+
+bool InputManager::isActionActive0(const int index) const
{
if (keyboard.isActionActive(index))
return true;
@@ -657,6 +670,9 @@ void InputManager::updateConditionMask()
mMask |= COND_NOINPUT;
}
+ if (!BuyDialog::isActive() && !SellDialog::isActive())
+ mMask |= COND_NOBUYSELL;
+
if (!player_node || !player_node->getAway())
mMask |= COND_NOAWAY;
@@ -676,8 +692,8 @@ void InputManager::updateConditionMask()
if (!player_node || !player_node->getDisableGameModifiers())
mMask |= COND_EMODS;
- if (!isActionActive(Input::KEY_STOP_ATTACK)
- && !isActionActive(Input::KEY_UNTARGET))
+ if (!isActionActive0(Input::KEY_STOP_ATTACK)
+ && !isActionActive0(Input::KEY_UNTARGET))
{
mMask |= COND_NOTARGET;
}
@@ -690,12 +706,12 @@ void InputManager::updateConditionMask()
bool InputManager::checkKey(const KeyData *const key) const
{
-// logger->log("mask=%d, condition=%d", mMask, key->condition);
+ logger->log("mask=%d, condition=%d", mMask, key->condition);
if (!key || (key->condition & mMask) != key->condition)
return false;
return (key->modKeyIndex == Input::KEY_NO_VALUE
- || isActionActive(key->modKeyIndex));
+ || isActionActive0(key->modKeyIndex));
}
bool InputManager::invokeKey(const KeyData *const key, const int keyNum)