From b85ed06d79358b1285a7b1c0c7c24c0fc64d8c80 Mon Sep 17 00:00:00 2001 From: Torbjörn Andersson Date: Wed, 21 Jun 2006 15:05:12 +0000 Subject: Match the original behaviour more closely when examining inventory items. The text is displayed at least 800 ms. See bug #1181865. svn-id: r23233 --- engines/sky/logic.cpp | 2 +- engines/sky/mouse.cpp | 27 ++++++++++++++++++++++----- engines/sky/mouse.h | 2 +- 3 files changed, 24 insertions(+), 7 deletions(-) (limited to 'engines/sky') diff --git a/engines/sky/logic.cpp b/engines/sky/logic.cpp index 8ff791966c..7d2d91f9b6 100644 --- a/engines/sky/logic.cpp +++ b/engines/sky/logic.cpp @@ -2385,7 +2385,7 @@ bool Logic::fnLookAt(uint32 a, uint32 b, uint32 c) { fnNoHuman(0, 0, 0); _skyMouse->lockMouse(); - _skyMouse->waitMouseNotPressed(); + _skyMouse->waitMouseNotPressed(800); _skyMouse->unlockMouse(); fnAddHuman(0, 0, 0); diff --git a/engines/sky/mouse.cpp b/engines/sky/mouse.cpp index d3a212a764..689fc98e0c 100644 --- a/engines/sky/mouse.cpp +++ b/engines/sky/mouse.cpp @@ -167,17 +167,34 @@ void Mouse::drawNewMouse() { //drawMouse(); } -void Mouse::waitMouseNotPressed(void) { +void Mouse::waitMouseNotPressed(int minDelay) { bool mousePressed = true; + uint32 now = _system->getMillis(); OSystem::Event event; - while (mousePressed) { - _system->delayMillis(20); + while (mousePressed || _system->getMillis() < now + minDelay) { while (_system->pollEvent(event)) { - if ((event.type == OSystem::EVENT_LBUTTONUP) || - (event.type == OSystem::EVENT_QUIT)) + switch (event.type) { + case OSystem::EVENT_LBUTTONUP: + mousePressed = false; + break; + case OSystem::EVENT_KEYDOWN: + if (event.kbd.ascii == 27) { + minDelay = 0; + mousePressed = false; + } + break; + case OSystem::EVENT_QUIT: + SkyEngine::_systemVars.quitGame = true; + minDelay = 0; mousePressed = false; + break; + default: + break; + } } + _system->updateScreen(); + _system->delayMillis(20); } } diff --git a/engines/sky/mouse.h b/engines/sky/mouse.h index 9e713cce03..a76b1d387a 100644 --- a/engines/sky/mouse.h +++ b/engines/sky/mouse.h @@ -54,7 +54,7 @@ public: void spriteMouse(uint16 frameNum, uint8 mouseX, uint8 mouseY); void useLogicInstance(Logic *skyLogic) { _skyLogic = skyLogic; }; void buttonPressed(uint8 button); - void waitMouseNotPressed(void); + void waitMouseNotPressed(int minDelay = 0); uint16 giveMouseX(void) { return _mouseX; }; uint16 giveMouseY(void) { return _mouseY; }; uint16 giveCurrentMouseType(void) { return _currentCursor; }; -- cgit v1.2.3