bool InputManager::checkKey(const KeyData *key) { // 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)); }
void InputManager::updateConditionMask() { mMask = 1; if (keyboard.isEnabled()) mMask += COND_ENABLED; if ((!chatWindow || !chatWindow->isInputFocused()) && !NpcDialog::isAnyInputFocused() && !InventoryWindow::isAnyInputFocused() && (!tradeWindow || !tradeWindow->isInpupFocused())) { mMask += COND_NOINPUT; } if (!player_node || !player_node->getAway()) mMask += COND_NOAWAY; if (!setupWindow || !setupWindow->isVisible()) mMask += COND_NOSETUP; if (Game::instance() && Game::instance()->getValidSpeed()) mMask += COND_VALIDSPEED; if (gui && !gui->getFocusHandler()->getModalFocused()) mMask += COND_NOMODAL; NpcDialog *dialog = NpcDialog::getActive(); if (!dialog || !dialog->isTextInputFocused()) mMask += COND_NONPCINPUT; if (!player_node || !player_node->getDisableGameModifiers()) mMask += COND_EMODS; if (!isActionActive(Input::KEY_STOP_ATTACK) && !isActionActive(Input::KEY_UNTARGET)) { mMask += COND_NOTARGET; } if (!player_node || player_node->getFollow().empty()) mMask += COND_NOFOLLOW; }
bool RealtimeNode::isActionActive(const EventBuffer& buffer, ActionResult& out) const { if (isActionActive(buffer)) { ++out.nbRealtimeTriggers; return true; } else { return false; } }