diff options
author | Paul Gilbert | 2014-03-22 19:09:25 -0400 |
---|---|---|
committer | Paul Gilbert | 2014-03-22 19:09:25 -0400 |
commit | c64a024aa07d64ab821514f1c82f51fe33c1af0d (patch) | |
tree | 17904195955d3a8fd245f3126ece79b4d22faa9b | |
parent | a7c4fc7e234f604923aae0d08e03c6b8268688f4 (diff) | |
download | scummvm-rg350-c64a024aa07d64ab821514f1c82f51fe33c1af0d.tar.gz scummvm-rg350-c64a024aa07d64ab821514f1c82f51fe33c1af0d.tar.bz2 scummvm-rg350-c64a024aa07d64ab821514f1c82f51fe33c1af0d.zip |
MADS: Completed elementHighlighted method
-rw-r--r-- | engines/mads/screen.cpp | 32 |
1 files changed, 28 insertions, 4 deletions
diff --git a/engines/mads/screen.cpp b/engines/mads/screen.cpp index dac61d5bf1..0fc231822c 100644 --- a/engines/mads/screen.cpp +++ b/engines/mads/screen.cpp @@ -541,17 +541,41 @@ void ScreenObjects::elementHighlighted() { int newIndex = -1; int catIndex = userInterface._categoryIndexes[userInterface._category - 1]; - int newY = 0; - int var1E = 0; + int newX = 0, newY = 0; + Common::Point currentPos = _vm->_events->currentPos(); for (int idx = 0; idx < index & newIndex < 0; ++idx) { - warning("TODO"); + int scrObjIndex = (_category == CAT_HOTSPOT) ? catIndex - idx + index - 1 : + catIndex + idx; + + ScreenObject &scrObject = (*this)[scrObjIndex]; + Common::Rect bounds = scrObject._bounds; + newY = MAX((int)bounds.bottom, newY); + newX = MAX((int)bounds.left, newX); + + if (currentPos.y > newY && currentPos.y < bounds.bottom) { + if (var4) { + if (currentPos.x > newX && currentPos.x < bounds.right) { + newIndex = scrObjIndex - catIndex; + if (_category == CAT_HOTSPOT && newIndex < scene._hotspots.size()) + newIndex = scene._hotspots.size() - newIndex - 1; + } + } else if (!varA) { + newIndex = idx; + } else if (varA <= idx) { + if (currentPos.x > bounds.left) + newIndex = idx; + } else { + if (currentPos.x > bounds.right) + newIndex = idx; + } + } } if (newIndex == -1 && index > 0 && !var4) { if (_vm->_events->currentPos().y <= newY) { newIndex = 0; - if (varA && _vm->_events->currentPos().x >= var1E) + if (varA && _vm->_events->currentPos().x >= newX) newIndex = varA; } else { newIndex = index - 1; |