diff options
Diffstat (limited to 'engines/mohawk/riven_stack.cpp')
-rw-r--r-- | engines/mohawk/riven_stack.cpp | 76 |
1 files changed, 69 insertions, 7 deletions
diff --git a/engines/mohawk/riven_stack.cpp b/engines/mohawk/riven_stack.cpp index 847a98f5ab..c90642adf1 100644 --- a/engines/mohawk/riven_stack.cpp +++ b/engines/mohawk/riven_stack.cpp @@ -41,7 +41,7 @@ RivenStack::RivenStack(MohawkEngine_Riven *vm, uint16 id) : _id(id), _mouseIsDown(false), _shouldRefreshMouseCursor(false), - _keyPressed(Common::KEYCODE_INVALID) { + _keyAction(kKeyActionNone) { removeTimer(); loadResourceNames(); @@ -305,16 +305,78 @@ void RivenStack::onFrame() { _vm->_scriptMan->runScript(script, true); } -Common::KeyCode RivenStack::keyGetPressed() const { - return _keyPressed; +RivenKeyAction RivenStack::keyGetAction() const { + return _keyAction; } -void RivenStack::keyForceUp() { - _keyPressed = Common::KEYCODE_INVALID; +void RivenStack::keyResetAction() { + _keyAction = kKeyActionNone; } -void RivenStack::onKeyPressed(const Common::KeyCode keyCode) { - _keyPressed = keyCode; +void RivenStack::onKeyPressed(const Common::KeyState &keyState) { + _keyAction = mapKeyStateToKeyAction(keyState); + + if (_vm->getCard() && !_vm->_scriptMan->hasQueuedScripts()) { + RivenScriptPtr script = _vm->getCard()->onKeyAction(_keyAction); + + if (!script->empty()) { + _vm->_scriptMan->runScript(script, true); + keyResetAction(); + } + } +} + +RivenKeyAction RivenStack::mapKeyStateToKeyAction(const Common::KeyState &keyState) { + switch (keyState.keycode) { + case Common::KEYCODE_ESCAPE: + return kKeyActionSkip; + case Common::KEYCODE_KP8: + if (keyState.flags & Common::KBD_NUM) { + break; + } + // Fallthrough + case Common::KEYCODE_UP: + return kKeyActionMoveForward; + case Common::KEYCODE_KP7: + if (keyState.flags & Common::KBD_NUM) { + break; + } + return kKeyActionMoveForwardLeft; + case Common::KEYCODE_KP9: + if (keyState.flags & Common::KBD_NUM) { + break; + } + return kKeyActionMoveForwardRight; + case Common::KEYCODE_KP4: + if (keyState.flags & Common::KBD_NUM) { + break; + } + // Fallthrough + case Common::KEYCODE_LEFT: + return kKeyActionMoveLeft; + case Common::KEYCODE_KP6: + if (keyState.flags & Common::KBD_NUM) { + break; + } + // Fallthrough + case Common::KEYCODE_RIGHT: + return kKeyActionMoveRight; + case Common::KEYCODE_KP2: + if (keyState.flags & Common::KBD_NUM) { + break; + } + // Fallthrough + case Common::KEYCODE_DOWN: + return kKeyActionMoveBack; + case Common::KEYCODE_PAGEUP: + return kKeyActionLookUp; + case Common::KEYCODE_PAGEDOWN: + return kKeyActionLookDown; + default: + break; + } + + return kKeyActionNone; } Common::Point RivenStack::getMousePosition() const { |