diff options
author | Paul Gilbert | 2014-03-02 23:09:17 -0500 |
---|---|---|
committer | Paul Gilbert | 2014-03-02 23:09:17 -0500 |
commit | 3a842a079c668e9dfc52a6056119d4932e8ef56d (patch) | |
tree | 5f74efaaf79b8c20c1494b1494493d6c39b0511c /engines/mads/scene_data.cpp | |
parent | a0996b7384e5c3321af97347613120d2f90ab64e (diff) | |
download | scummvm-rg350-3a842a079c668e9dfc52a6056119d4932e8ef56d.tar.gz scummvm-rg350-3a842a079c668e9dfc52a6056119d4932e8ef56d.tar.bz2 scummvm-rg350-3a842a079c668e9dfc52a6056119d4932e8ef56d.zip |
MADS: Bulk of implementation of ScreenObjects::check
Diffstat (limited to 'engines/mads/scene_data.cpp')
-rw-r--r-- | engines/mads/scene_data.cpp | 154 |
1 files changed, 150 insertions, 4 deletions
diff --git a/engines/mads/scene_data.cpp b/engines/mads/scene_data.cpp index d7aaa6216d..601d719b8d 100644 --- a/engines/mads/scene_data.cpp +++ b/engines/mads/scene_data.cpp @@ -30,6 +30,114 @@ namespace MADS { +ScreenObject::ScreenObject() { + _category = CAT_NONE; + _descId = 0; + _layer = 0; +} + +/*------------------------------------------------------------------------*/ + +ScreenObjects::ScreenObjects(MADSEngine *vm): _vm(vm) { + _v8333C = false; + _v832EC = 0; + _yp = 0; + _v7FECA = 0; + _v7FED6 = 0; + _v8332A = 0; + _selectedObject = 0; + _category = CAT_NONE; + _objectIndex = 0; + _released = false; +} + +void ScreenObjects::add(const Common::Rect &bounds, ScrCategory category, int descId) { + assert(size() < 100); + + ScreenObject so; + so._bounds = bounds; + so._category = category; + so._descId = descId; + so._layer = 0x1413; + + push_back(so); +} + +void ScreenObjects::check(bool scanFlag) { + Scene &scene = _vm->_game->_scene; + + if (!_vm->_events->_mouseButtons || _v832EC) + _v7FECA = false; + + if ((_vm->_events->_vD6 || _v8332A || _yp || _v8333C) && scanFlag) { + _selectedObject = scanBackwards(_vm->_events->currentPos(), LAYER_GUI); + if (_selectedObject > 0) { + _category = (ScrCategory)((*this)[_selectedObject - 1]._category & 7); + _objectIndex = (*this)[_selectedObject - 1]._descId; + } + + // Handling for easy mouse + ScrCategory category = scene._interface._category; + if (_vm->_easyMouse && !_vm->_events->_vD4 && category != _category + && scene._interface._category != CAT_NONE) { + _released = true; + if (category >= CAT_ACTION && category <= CAT_6) { + scene._interface.elementHighlighted(); + } + } + + _released = _vm->_events->_mouseReleased; + if (_vm->_events->_vD2 || (_vm->_easyMouse && !_vm->_events->_vD4)) + scene._interface._category = _category; + + if (!_vm->_events->_mouseButtons || _vm->_easyMouse) { + if (category >= CAT_ACTION && category <= CAT_6) { + scene._interface.elementHighlighted(); + } + } + + if (_vm->_events->_mouseButtons || (_vm->_easyMouse && scene._action._v83338 > 1 + && scene._interface._category == CAT_INV_LIST) || + (_vm->_easyMouse && scene._interface._category == CAT_HOTSPOT)) { + scene._action.checkActionAtMousePos(); + } + + if (_vm->_events->_mouseReleased) { + scene.leftClick(); + scene._interface._category = CAT_NONE; + } + + if (_vm->_events->_mouseButtons || _vm->_easyMouse || _yp) + proc1(); + + if (_vm->_events->_mouseButtons || _vm->_easyMouse) + scene._action.set(); + + _v8333C = 0; + } + + scene._action.refresh(); + + // Loop through image inter list + warning("TODO: iimageInterList loop"); +} + +int ScreenObjects::scanBackwards(const Common::Point &pt, int layer) { + for (int i = (int)size() - 1; i >= 0; --i) { + if ((*this)[i]._bounds.contains(pt) && ((*this)[i]._layer == layer)) + return i + 1; + } + + // Entry not found + return 0; +} + +void ScreenObjects::proc1() { + warning("TODO: ScreenObjects::proc1"); +} + +/*------------------------------------------------------------------------*/ + SpriteSlot::SpriteSlot() { _spriteType = ST_NONE; _seqIndex = 0; @@ -64,7 +172,7 @@ void SpriteSlots::clear(bool flag) { * Releases any sprites used by the player */ void SpriteSlots::releasePlayerSprites() { - Player &player = _vm->_game->player(); + Player &player = _vm->_game->_player; if (player._spritesLoaded && player._numSprites > 0) { int spriteEnd = player._spritesStart + player._numSprites - 1; @@ -114,6 +222,34 @@ DynamicHotspot::DynamicHotspot() { /*------------------------------------------------------------------------*/ +DynamicHotspots::DynamicHotspots(MADSEngine *vm): _vm(vm) { + _changed = false; +} + +void DynamicHotspots::clear() { + Common::Array<DynamicHotspot>::clear(); + _changed = false; +} + +void DynamicHotspots::refresh() { + Scene &scene = _vm->_game->_scene; + + for (uint idx = 0; idx < size(); ++idx) { + DynamicHotspot &dh = (*this)[idx]; + + switch (scene._screenObjects._v832EC) { + case 0: + case 2: + scene._screenObjects.add(dh._bounds, CAT_12, dh._descId); + scene._screenObjects._v8333C = true; + default: + break; + } + } +} + +/*------------------------------------------------------------------------*/ + SequenceEntry::SequenceEntry() { _spritesIndex = 0; _flipped =0; @@ -216,6 +352,16 @@ void SceneNode::load(Common::SeekableReadStream *f) { /*------------------------------------------------------------------------*/ +InterfaceSurface::InterfaceSurface(MADSEngine *vm): _vm(vm) { + _category = CAT_NONE; +} + +void InterfaceSurface::elementHighlighted() { + warning("TODO: InterfaceSurface::elementHighlighted"); +} + +/*------------------------------------------------------------------------*/ + void SceneInfo::SpriteInfo::load(Common::SeekableReadStream *f) { f->skip(3); _spriteSetIndex = f->readByte(); @@ -228,15 +374,15 @@ void SceneInfo::SpriteInfo::load(Common::SeekableReadStream *f) { /*------------------------------------------------------------------------*/ -void InterfaceSurface::load(MADSEngine *vm, const Common::String &resName) { +void InterfaceSurface::load(const Common::String &resName) { File f(resName); MadsPack madsPack(&f); // Load in the palette Common::SeekableReadStream *palStream = madsPack.getItemStream(0); - RGB4 *gamePalP = &vm->_palette->_gamePalette[0]; - byte *palP = &vm->_palette->_mainPalette[0]; + RGB4 *gamePalP = &_vm->_palette->_gamePalette[0]; + byte *palP = &_vm->_palette->_mainPalette[0]; for (int i = 0; i < 16; ++i, gamePalP++, palP += 3) { palP[0] = palStream->readByte(); |