diff options
author | Alyssa Milburn | 2010-12-04 23:48:31 +0000 |
---|---|---|
committer | Alyssa Milburn | 2010-12-04 23:48:31 +0000 |
commit | 4a8d68f3d327b3f1bdaffa9540d4460afdb283c4 (patch) | |
tree | 01d45fb656878ce7359e1b6038ddf05e499182c3 /engines/mohawk | |
parent | e37257fe39e8c5c7f9004f793d73f6684b8eb743 (diff) | |
download | scummvm-rg350-4a8d68f3d327b3f1bdaffa9540d4460afdb283c4.tar.gz scummvm-rg350-4a8d68f3d327b3f1bdaffa9540d4460afdb283c4.tar.bz2 scummvm-rg350-4a8d68f3d327b3f1bdaffa9540d4460afdb283c4.zip |
MOHAWK: implement setGlobalEnable and setGlobalVisible for LB
svn-id: r54771
Diffstat (limited to 'engines/mohawk')
-rw-r--r-- | engines/mohawk/livingbooks.cpp | 75 | ||||
-rw-r--r-- | engines/mohawk/livingbooks.h | 6 |
2 files changed, 56 insertions, 25 deletions
diff --git a/engines/mohawk/livingbooks.cpp b/engines/mohawk/livingbooks.cpp index 96dd63dcb0..7a97616360 100644 --- a/engines/mohawk/livingbooks.cpp +++ b/engines/mohawk/livingbooks.cpp @@ -1546,6 +1546,8 @@ LBItem::LBItem(MohawkEngine_LivingBooks *vm, Common::Rect rect) : _vm(vm), _rect _enabled = false; _visible = true; _playing = false; + _globalEnabled = true; + _globalVisible = true; _nextTime = 0; _startTime = 0; _loops = 0; @@ -1710,8 +1712,7 @@ void LBItem::readData(uint16 type, uint16 size, Common::SeekableSubReadStreamEnd case kLBGlobalSetNotVisible: assert(size == 0); - // FIXME - _visible = false; + _globalVisible = false; break; case kLBSetAmbient: @@ -1764,6 +1765,13 @@ void LBItem::setEnabled(bool enabled) { _enabled = enabled; } +void LBItem::setGlobalEnabled(bool enabled) { + bool wasEnabled = !_neverEnabled && _enabled && _globalEnabled; + _globalEnabled = enabled; + if (wasEnabled != (!_neverEnabled && _enabled && _globalEnabled)) + setEnabled(enabled); +} + bool LBItem::contains(Common::Point point) { if (_playing && _loopMode == 0xFFFF) stop(); @@ -1771,11 +1779,11 @@ bool LBItem::contains(Common::Point point) { if (!_playing && _timingMode == 2) setNextTime(_periodMin, _periodMax); - return _visible && _rect.contains(point); + return _visible && _globalVisible && _rect.contains(point); } void LBItem::update() { - if (_neverEnabled || !_enabled) + if (_neverEnabled || !_enabled || !_globalEnabled) return; if (_nextTime == 0 || _nextTime > (uint32)(_vm->_system->getMillis() / 16)) @@ -1790,7 +1798,7 @@ void LBItem::update() { } void LBItem::handleMouseDown(Common::Point pos) { - if (_neverEnabled || !_enabled) + if (_neverEnabled || !_enabled || !_globalEnabled) return; _vm->setFocus(this); @@ -1811,7 +1819,7 @@ bool LBItem::togglePlaying(bool playing, bool restart) { _vm->queueDelayedEvent(DelayedEvent(this, kLBEventDone)); return true; } - if (!_neverEnabled && _enabled && !_playing) { + if (!_neverEnabled && _enabled && _globalEnabled && !_playing) { _playing = togglePlaying(true, restart); if (_playing) { _nextTime = 0; @@ -1888,6 +1896,13 @@ void LBItem::setVisible(bool visible) { _vm->_needsRedraw = true; } +void LBItem::setGlobalVisible(bool visible) { + bool wasEnabled = _visible && _globalVisible; + _globalVisible = visible; + if (wasEnabled != (_visible && _globalVisible)) + _vm->_needsRedraw = true; +} + void LBItem::startPhase(uint phase) { if (_phase == phase) setEnabled(true); @@ -2008,23 +2023,19 @@ void LBItem::runScript(uint id) { break; case 0xb: - // FIXME: 'showGlobal' - target->setVisible(false); + target->setGlobalVisible(false); break; case 0xc: - // FIXME: 'showGlobal' - target->setVisible(true); + target->setGlobalVisible(true); break; case 0xd: - // FIXME: 'enableGlobal' - target->setEnabled(false); + target->setGlobalEnabled(false); break; case 0xe: - // FIXME: 'enableGlobal' - target->setEnabled(true); + target->setGlobalEnabled(true); break; case 0xf: @@ -2078,7 +2089,7 @@ bool LBSoundItem::togglePlaying(bool playing, bool restart) { _vm->_sound->stopSound(_resourceId); } - if (_neverEnabled || !_enabled) + if (_neverEnabled || !_enabled || !_globalEnabled) return false; _running = true; @@ -2140,6 +2151,14 @@ void LBGroupItem::setEnabled(bool enabled) { } } +void LBGroupItem::setGlobalEnabled(bool enabled) { + for (uint i = 0; i < _groupEntries.size(); i++) { + LBItem *item = _vm->getItemById(_groupEntries[i].entryId); + if (item) + item->setGlobalEnabled(enabled); + } +} + bool LBGroupItem::contains(Common::Point point) { return false; } @@ -2170,6 +2189,14 @@ void LBGroupItem::setVisible(bool visible) { } } +void LBGroupItem::setGlobalVisible(bool visible) { + for (uint i = 0; i < _groupEntries.size(); i++) { + LBItem *item = _vm->getItemById(_groupEntries[i].entryId); + if (item) + item->setGlobalVisible(visible); + } +} + void LBGroupItem::startPhase(uint phase) { _starting = true; LBItem::startPhase(phase); @@ -2207,7 +2234,7 @@ void LBPaletteItem::readData(uint16 type, uint16 size, Common::SeekableSubReadSt } void LBPaletteItem::draw() { - if (!_visible) + if (!_visible || !_globalVisible) return; _vm->_system->setPalette(_palette + _drawStart * 4, _drawStart, _drawCount); @@ -2370,7 +2397,7 @@ void LBLiveTextItem::drawWord(uint word, uint yPos) { } void LBLiveTextItem::handleMouseDown(Common::Point pos) { - if (_neverEnabled || !_enabled || _currentPhrase != 0xFFFF) + if (_neverEnabled || !_enabled || _globalEnabled || _currentPhrase != 0xFFFF) return LBItem::handleMouseDown(pos); pos.x -= _rect.left; @@ -2401,7 +2428,7 @@ void LBLiveTextItem::handleMouseDown(Common::Point pos) { bool LBLiveTextItem::togglePlaying(bool playing, bool restart) { if (!playing) return LBItem::togglePlaying(playing, restart); - if (_neverEnabled || !_enabled) + if (_neverEnabled || !_enabled || !_globalEnabled) return (_currentPhrase != 0xFFFF); // TODO: handle this properly @@ -2423,7 +2450,7 @@ void LBLiveTextItem::stop() { } void LBLiveTextItem::notify(uint16 data, uint16 from) { - if (_neverEnabled || !_enabled || _currentPhrase == 0xFFFF) + if (_neverEnabled || !_enabled || !_globalEnabled || _currentPhrase == 0xFFFF) return LBItem::notify(data, from); if (_currentWord != 0xFFFF) { @@ -2489,7 +2516,7 @@ void LBPictureItem::init() { } void LBPictureItem::draw() { - if (!_visible) + if (!_visible || !_globalVisible) return; _vm->_gfx->copyAnimImageToScreen(_resourceId, _rect.left, _rect.top); @@ -2513,7 +2540,7 @@ void LBAnimationItem::setEnabled(bool enabled) { if (_running) { if (enabled && _neverEnabled) _anim->start(); - else if (!_neverEnabled && !enabled && _enabled) + else if (!_neverEnabled && !enabled && _enabled && _globalEnabled) if (_running) { _anim->stop(); @@ -2530,7 +2557,7 @@ bool LBAnimationItem::contains(Common::Point point) { } void LBAnimationItem::update() { - if (!_neverEnabled && _enabled && _running) { + if (!_neverEnabled && _enabled && _globalEnabled && _running) { bool wasDone = _anim->update(); if (wasDone) done(true); @@ -2541,7 +2568,7 @@ void LBAnimationItem::update() { bool LBAnimationItem::togglePlaying(bool playing, bool restart) { if (playing) { - if (!_neverEnabled && _enabled) { + if (!_neverEnabled && _enabled && _globalEnabled) { if (restart) seek(1); _running = true; @@ -2592,7 +2619,7 @@ void LBAnimationItem::startPhase(uint phase) { } void LBAnimationItem::draw() { - if (!_visible) + if (!_visible || !_globalVisible) return; _anim->draw(); diff --git a/engines/mohawk/livingbooks.h b/engines/mohawk/livingbooks.h index 499a3f86ce..47bd586c6c 100644 --- a/engines/mohawk/livingbooks.h +++ b/engines/mohawk/livingbooks.h @@ -234,6 +234,7 @@ public: virtual void destroySelf(); // 0x2 virtual void setEnabled(bool enabled); // 0x3 + virtual void setGlobalEnabled(bool enabled); virtual bool contains(Common::Point point); // 0x7 virtual void update(); // 0x8 virtual void draw() { } // 0x9 @@ -247,6 +248,7 @@ public: virtual void seek(uint16 pos) { } // 0x13 virtual void setFocused(bool focused) { } // 0x14 virtual void setVisible(bool visible); // 0x17 + virtual void setGlobalVisible(bool enabled); virtual void startPhase(uint phase); // 0x18 virtual void stop(); // 0x19 virtual void notify(uint16 data, uint16 from); // 0x1A @@ -264,7 +266,7 @@ protected: uint16 _resourceId; uint16 _itemId; - bool _visible, _playing, _enabled, _neverEnabled; + bool _visible, _globalVisible, _playing, _enabled, _neverEnabled, _globalEnabled; uint32 _nextTime, _startTime; uint16 _loops; @@ -305,11 +307,13 @@ public: void readData(uint16 type, uint16 size, Common::SeekableSubReadStreamEndian *stream); void setEnabled(bool enabled); + void setGlobalEnabled(bool enabled); bool contains(Common::Point point); bool togglePlaying(bool playing, bool restart); // 0x12 void seek(uint16 pos); void setVisible(bool visible); + void setGlobalVisible(bool visible); void startPhase(uint phase); void stop(); |