diff options
author | Travis Howell | 2007-06-05 11:38:26 +0000 |
---|---|---|
committer | Travis Howell | 2007-06-05 11:38:26 +0000 |
commit | 56cde56d4b138bd840a6031e8dd8bd647b1296d8 (patch) | |
tree | 1865922397a6e9d7d80dc680243d033609c820e1 /engines/agos | |
parent | 3547c13e49f14e07a054f77f4cc6f92daa71dd87 (diff) | |
download | scummvm-rg350-56cde56d4b138bd840a6031e8dd8bd647b1296d8.tar.gz scummvm-rg350-56cde56d4b138bd840a6031e8dd8bd647b1296d8.tar.bz2 scummvm-rg350-56cde56d4b138bd840a6031e8dd8bd647b1296d8.zip |
Fix input issues in earlier games, and split handleMouseMoved() due to difference in earlier games.
svn-id: r27103
Diffstat (limited to 'engines/agos')
-rw-r--r-- | engines/agos/agos.cpp | 2 | ||||
-rw-r--r-- | engines/agos/agos.h | 4 | ||||
-rw-r--r-- | engines/agos/cursor.cpp | 74 | ||||
-rw-r--r-- | engines/agos/event.cpp | 1 | ||||
-rw-r--r-- | engines/agos/verb.cpp | 20 |
5 files changed, 74 insertions, 27 deletions
diff --git a/engines/agos/agos.cpp b/engines/agos/agos.cpp index 37e8c16c21..6ef573cafb 100644 --- a/engines/agos/agos.cpp +++ b/engines/agos/agos.cpp @@ -302,6 +302,8 @@ AGOSEngine::AGOSEngine(OSystem *syst) _leftButtonDown = 0; _rightButtonDown = 0; _clickOnly = 0; + _leftClick = 0; + _oneClick = 0; _noRightClick = false; _leftButton = 0; diff --git a/engines/agos/agos.h b/engines/agos/agos.h index d043656eca..7d0c2d0d0a 100644 --- a/engines/agos/agos.h +++ b/engines/agos/agos.h @@ -383,7 +383,7 @@ protected: byte _leftButtonDown; byte _leftButton, _leftButtonCount, _leftButtonOld; byte _rightButtonDown; - bool _clickOnly; + bool _clickOnly, _leftClick, _oneClick; bool _noRightClick; Item *_dummyItem1; @@ -1472,6 +1472,8 @@ protected: virtual void drawIcon(WindowBlock *window, uint icon, uint x, uint y); + virtual void handleMouseMoved(); + virtual void addArrows(WindowBlock *window); virtual uint setupIconHitArea(WindowBlock *window, uint num, uint x, uint y, Item *item_ptr); diff --git a/engines/agos/cursor.cpp b/engines/agos/cursor.cpp index c43e243bf3..35bb8ea216 100644 --- a/engines/agos/cursor.cpp +++ b/engines/agos/cursor.cpp @@ -380,7 +380,7 @@ void AGOSEngine_PuzzlePack::handleMouseMoved() { drawMousePointer(); } -void AGOSEngine::handleMouseMoved() { +void AGOSEngine_Simon1::handleMouseMoved() { uint x; if (_mouseHideCount) { @@ -399,13 +399,6 @@ void AGOSEngine::handleMouseMoved() { resetVerbs(); } - if (_leftButton == 0) { - if (_dragMode != 0) { - _dragEnd = 1; - } - _dragCount = 0; - } - if (getGameType() == GType_FF) { if (getBitFlag(99)) { // Oracle if (_mouse.x >= 10 && _mouse.x <= 635 && _mouse.y >= 5 && _mouse.y <= 475) { @@ -449,7 +442,50 @@ void AGOSEngine::handleMouseMoved() { get_out2:; _vgaVar9 = 0; } - } else if (getGameType() == GType_WW) { + } + + if (_mouse != _mouseOld) + _needHitAreaRecalc++; + + if (_leftButtonOld == 0 && _leftButtonCount != 0) { + boxController(_mouse.x, _mouse.y, 3); + } + _leftButtonOld = _leftButton; + + x = 0; + if (_lastHitArea3 == 0 && _leftButtonDown != 0) { + _leftButtonDown = 0; + x = 1; + } else { + if (_litBoxFlag == 0 && _needHitAreaRecalc == 0) + goto get_out; + } + + boxController(_mouse.x, _mouse.y, x); + _lastHitArea3 = _lastHitArea; + if (x == 1 && _lastHitArea == NULL) + _lastHitArea3 = (HitArea *) -1; + +get_out: + _mouseOld = _mouse; + drawMousePointer(); + + _needHitAreaRecalc = 0; + _litBoxFlag = 0; +} + +void AGOSEngine::handleMouseMoved() { + uint x; + + if (_mouseHideCount) { + CursorMan.showMouse(false); + return; + } + + CursorMan.showMouse(true); + _mouse = _eventMan->getMousePos(); + + if (getGameType() == GType_WW) { if (_variableArray[51] != 0 && _mouseCursor != _variableArray[51]) { _mouseCursor = _variableArray[51]; _needHitAreaRecalc++; @@ -466,10 +502,20 @@ void AGOSEngine::handleMouseMoved() { } } + if (_leftClick == true) { + _leftClick = false; + if (_dragMode != 0) { + _dragEnd = 1; + } else { + _oneClick = true; + } + _dragCount = 0; + } + if (_mouse != _mouseOld) _needHitAreaRecalc++; - if (_leftButtonOld == 0 && _leftButtonCount != 0) { + if (_leftButtonOld == 0 && _leftButton != 0) { _lastClickRem = 0; boxController(_mouse.x, _mouse.y, 3); } @@ -493,8 +539,8 @@ void AGOSEngine::handleMouseMoved() { } x = 0; - if (_lastHitArea3 == 0 && _leftButtonDown != 0) { - _leftButtonDown = 0; + if (_oneClick == true) { + _oneClick = false; x = 1; } else { if (_litBoxFlag == 0 && _needHitAreaRecalc == 0) @@ -504,11 +550,7 @@ void AGOSEngine::handleMouseMoved() { boxstuff: boxController(_mouse.x, _mouse.y, x); _lastHitArea3 = _lastHitArea; - if (x == 1 && _lastHitArea == NULL) - _lastHitArea3 = (HitArea *) -1; - get_out: - _mouseOld = _mouse; drawMousePointer(); diff --git a/engines/agos/event.cpp b/engines/agos/event.cpp index 8570859bb8..5c16679dc6 100644 --- a/engines/agos/event.cpp +++ b/engines/agos/event.cpp @@ -510,6 +510,7 @@ void AGOSEngine::delay(uint amount) { _leftButton = 0; _leftButtonCount = 0; + _leftClick = true; break; case Common::EVENT_RBUTTONDOWN: if (getGameType() == GType_FF) diff --git a/engines/agos/verb.cpp b/engines/agos/verb.cpp index ddb7398312..27c5b4012e 100644 --- a/engines/agos/verb.cpp +++ b/engines/agos/verb.cpp @@ -674,21 +674,21 @@ void AGOSEngine::boxController(uint x, uint y, uint mode) { if (mode != 0) { if (mode == 3) { - if (getGameType() == GType_ELVIRA1) { + if (getGameType() == GType_ELVIRA1 || getGameType() == GType_ELVIRA2) { if (best_ha->verb & 0x4000) { - if (_variableArray[500] == 0) { + if (getGameType() == GType_ELVIRA1 && _variableArray[500] == 0) { _variableArray[500] = best_ha->verb & 0xBFFF; } - } - if (_clickOnly != 0 && best_ha->id < 8) { - uint id = best_ha->id; - if (id >= 4) - id -= 4; + if (_clickOnly != 0 && best_ha->id < 8) { + uint id = best_ha->id; + if (id >= 4) + id -= 4; - invertBox(findBox(id), 0, 0, 0, 0); - _clickOnly = 0; - return; + invertBox(findBox(id), 0, 0, 0, 0); + _clickOnly = 0; + return; + } } } |