aboutsummaryrefslogtreecommitdiff
path: root/engines/mads/screen.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/mads/screen.cpp')
-rw-r--r--engines/mads/screen.cpp94
1 files changed, 88 insertions, 6 deletions
diff --git a/engines/mads/screen.cpp b/engines/mads/screen.cpp
index 975ec7720b..3565c1ac79 100644
--- a/engines/mads/screen.cpp
+++ b/engines/mads/screen.cpp
@@ -251,17 +251,22 @@ ScreenObject::ScreenObject() {
/*------------------------------------------------------------------------*/
ScreenObjects::ScreenObjects(MADSEngine *vm) : _vm(vm) {
+ _objectY = -1;
_v8333C = false;
_v832EC = 0;
_v7FECA = 0;
_v7FED6 = 0;
_v8332A = 0;
_category = CAT_NONE;
- _objectIndex = 0;
+ _newDescId = 0;
+ _newDescId = 0;
_released = false;
_uiCount = 0;
_hotspotsIndex = 0;
_selectedObject = -1;
+ _scrollerY = -1;
+ _milliTime = 0;
+ _eventFlag = false;
}
void ScreenObjects::add(const Common::Rect &bounds, Layer layer, ScrCategory category, int descId) {
@@ -282,11 +287,13 @@ void ScreenObjects::check(bool scanFlag) {
if (!_vm->_events->_mouseButtons || _v832EC)
_v7FECA = false;
- if ((_vm->_events->_vD6 || _v8332A || _vm->_game->_scene._userInterface._scrollerY || _v8333C) && scanFlag) {
+ if ((_vm->_events->_mouseMoved || _vm->_game->_scene._userInterface._scrollerY
+ || _v8332A || _v8333C) && scanFlag) {
+ _category = CAT_NONE;
_selectedObject = scanBackwards(_vm->_events->currentPos(), LAYER_GUI);
if (_selectedObject > 0) {
_category = (ScrCategory)((*this)[_selectedObject - 1]._category & 7);
- _objectIndex = (*this)[_selectedObject - 1]._descId;
+ _newDescId = (*this)[_selectedObject - 1]._descId;
}
// Handling for easy mouse
@@ -297,6 +304,8 @@ void ScreenObjects::check(bool scanFlag) {
if (category >= CAT_ACTION && category <= CAT_TALK_ENTRY) {
scene._userInterface.elementHighlighted();
}
+
+ scene._action.checkActionAtMousePos();
}
_released = _vm->_events->_mouseReleased;
@@ -321,7 +330,7 @@ void ScreenObjects::check(bool scanFlag) {
}
if (_vm->_events->_mouseButtons || _vm->_easyMouse || scene._userInterface._scrollerY)
- proc1();
+ checkScroller();
if (_vm->_events->_mouseButtons || _vm->_easyMouse)
scene._action.set();
@@ -362,8 +371,81 @@ int ScreenObjects::scanBackwards(const Common::Point &pt, int layer) {
return 0;
}
-void ScreenObjects::proc1() {
- warning("TODO: ScreenObjects::proc1");
+void ScreenObjects::checkScroller() {
+ UserInterface &userInterface = _vm->_game->_scene._userInterface;
+ Common::Array<int> &inventoryList = _vm->_game->_objects._inventoryList;
+
+ if (_v832EC)
+ return;
+
+ userInterface._scrollerY = 0;
+
+ if ((_category == CAT_INV_SCROLLER || (_scrollerY == 3 && _vm->_events->_vD4))
+ && (_vm->_events->_vD4 || _vm->_easyMouse)) {
+ if ((_vm->_events->_vD2 || (_vm->_easyMouse && !_vm->_events->_vD4))
+ && _category == CAT_INV_SCROLLER) {
+ _currentDescId = _newDescId;
+ }
+ }
+
+ if (_newDescId == _currentDescId || _scrollerY == 3) {
+ _vm->_game->_scene._userInterface._scrollerY = _currentDescId;
+ uint32 currentMilli = g_system->getMillis();
+ uint32 timeInc = _eventFlag ? 100 : 380;
+
+ if (_vm->_events->_vD2 || (_milliTime + timeInc) <= currentMilli) {
+ _eventFlag = _vm->_events->_vD2 < 1;
+ _milliTime = currentMilli;
+
+ switch (_currentDescId) {
+ case 1:
+ // Scroll up
+ if (userInterface._inventoryTopIndex > 0 && inventoryList.size() > 0) {
+ --userInterface._inventoryTopIndex;
+ userInterface._inventoryChanged = true;
+ }
+ break;
+
+ case 2:
+ // Scroll down
+ if (userInterface._inventoryTopIndex < (int)inventoryList.size() &&
+ inventoryList.size() > 0) {
+ ++userInterface._inventoryTopIndex;
+ userInterface._inventoryChanged = true;
+ }
+ break;
+
+ case 3: {
+ // Inventory slider
+ int newIndex = CLIP((int)_vm->_events->currentPos().y - 170, 0, 17)
+ * inventoryList.size() / 10;
+ if (newIndex >= (int)inventoryList.size())
+ newIndex = inventoryList.size() - 1;
+
+ if (inventoryList.size() > 0) {
+ userInterface._inventoryChanged = newIndex != userInterface._inventoryTopIndex;
+ userInterface._inventoryTopIndex = newIndex;
+ }
+ break;
+ }
+
+ default:
+ break;
+ }
+
+ if (userInterface._inventoryChanged) {
+ int dummy;
+ userInterface.drawInventory(2, 0, &dummy);
+ }
+ }
+ }
+
+ if (userInterface._scrollerY != _scrollerY ||
+ userInterface._objectY != _objectY)
+ userInterface.scrollerChanged();
+
+ _scrollerY = userInterface._scrollerY;
+ _objectY = userInterface._objectY;
}
/*------------------------------------------------------------------------*/