aboutsummaryrefslogtreecommitdiff
path: root/engines/kyra/lol.cpp
diff options
context:
space:
mode:
authorFlorian Kagerer2009-06-21 20:40:31 +0000
committerFlorian Kagerer2009-06-21 20:40:31 +0000
commitdf611a52784a41660c578fe22aed190d71101740 (patch)
tree2e4fe27b6b1ccd88b9d25a380fb7f47bb036305c /engines/kyra/lol.cpp
parent7eaf539b23c0d4a52c7c562532649e6bff69be90 (diff)
downloadscummvm-rg350-df611a52784a41660c578fe22aed190d71101740.tar.gz
scummvm-rg350-df611a52784a41660c578fe22aed190d71101740.tar.bz2
scummvm-rg350-df611a52784a41660c578fe22aed190d71101740.zip
LOL: - implemented support for "floating cursors"
- prevent complete refresh for audio menu whenever a mouse button is pressed svn-id: r41734
Diffstat (limited to 'engines/kyra/lol.cpp')
-rw-r--r--engines/kyra/lol.cpp57
1 files changed, 53 insertions, 4 deletions
diff --git a/engines/kyra/lol.cpp b/engines/kyra/lol.cpp
index ba6689c8a8..399b051ba0 100644
--- a/engines/kyra/lol.cpp
+++ b/engines/kyra/lol.cpp
@@ -200,7 +200,7 @@ LoLEngine::LoLEngine(OSystem *system, const GameFlags &flags) : KyraEngine_v1(sy
_partyPosX = _partyPosY = 0;
_shpDmX = _shpDmY = _dmScaleW = _dmScaleH = 0;
- _floatingMouseArrowControl = 0;
+ _floatingCursorControl = _currentFloatingCursor = 0;
memset(_activeTim, 0, sizeof(_activeTim));
memset(_openDoorState, 0, sizeof(_openDoorState));
@@ -663,6 +663,55 @@ bool LoLEngine::posWithinRect(int mouseX, int mouseY, int x1, int y1, int x2, in
return true;
}
+void LoLEngine::checkFloatingPointerRegions() {
+ if (!_floatingCursorsEnabled)
+ return;
+
+ int t = -1;
+
+ Common::Point p = getMousePos();
+ int mouseX = p.x;
+ int mouseY = p.y;
+
+ if (!(_updateFlags & 4) & !_floatingCursorControl) {
+ if (posWithinRect(p.x, p.y, 96, 0, 303, 136)) {
+ if (!posWithinRect(p.x, p.y, 128, 16, 271, 119)) {
+ if (posWithinRect(p.x, p.y, 112, 0, 287, 15))
+ t = 0;
+ if (posWithinRect(p.x, p.y, 272, 88, 303, 319))
+ t = 1;
+ if (posWithinRect(p.x, p.y, 112, 110, 287, 135))
+ t = 2;
+ if (posWithinRect(p.x, p.y, 96, 88, 127, 119))
+ t = 3;
+ if (posWithinRect(p.x, p.y, 96, 16, 127, 87))
+ t = 4;
+ if (posWithinRect(p.x, p.y, 272, 16, 303, 87))
+ t = 5;
+
+ if (t < 4) {
+ int d = (_currentDirection + t) & 3;
+ if (!checkBlockPassability(calcNewBlockPosition(_currentBlock, d), d))
+ t = 6;
+ }
+ }
+ }
+ }
+
+ if (t == _currentFloatingCursor)
+ return;
+
+ if (t == -1) {
+ setMouseCursorToItemInHand();
+ } else {
+ static const uint8 floatingPtrX[] = { 7, 13, 7, 0, 0, 15, 7 };
+ static const uint8 floatingPtrY[] = { 0, 7, 12, 7, 6, 6, 7 };
+ _screen->setMouseCursor(floatingPtrX[t], floatingPtrY[t], _gameShapes[10 + t]);
+ }
+
+ _currentFloatingCursor = t;
+}
+
uint8 *LoLEngine::getItemIconShapePtr(int index) {
int ix = _itemProperties[_itemsInPlay[index].itemPropertyIndex].shpIndex;
if (_itemProperties[_itemsInPlay[index].itemPropertyIndex].flags & 0x200)
@@ -860,7 +909,7 @@ void LoLEngine::runLoop() {
_timer->update();
- //checkFloatingPointerRegions();
+ checkFloatingPointerRegions();
gui_updateInput();
update();
@@ -1465,7 +1514,7 @@ void LoLEngine::gui_specialSceneSuspendControls(int controlMode) {
_specialSceneFlag = 1;
_currentControlMode = controlMode;
calcCharPortraitXpos();
- //checkMouseRegions();
+ checkFloatingPointerRegions();
}
void LoLEngine::gui_specialSceneRestoreControls(int restoreLamp) {
@@ -1475,7 +1524,7 @@ void LoLEngine::gui_specialSceneRestoreControls(int restoreLamp) {
}
_updateFlags &= 0xfffe;
_specialSceneFlag = 0;
- //checkMouseRegions();
+ checkFloatingPointerRegions();
}
void LoLEngine::restoreAfterSceneWindowDialogue(int redraw) {