aboutsummaryrefslogtreecommitdiff
path: root/engines/mohawk/riven_stack.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/mohawk/riven_stack.cpp')
-rw-r--r--engines/mohawk/riven_stack.cpp76
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 {