aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlyssa Milburn2010-12-04 23:48:31 +0000
committerAlyssa Milburn2010-12-04 23:48:31 +0000
commit4a8d68f3d327b3f1bdaffa9540d4460afdb283c4 (patch)
tree01d45fb656878ce7359e1b6038ddf05e499182c3
parente37257fe39e8c5c7f9004f793d73f6684b8eb743 (diff)
downloadscummvm-rg350-4a8d68f3d327b3f1bdaffa9540d4460afdb283c4.tar.gz
scummvm-rg350-4a8d68f3d327b3f1bdaffa9540d4460afdb283c4.tar.bz2
scummvm-rg350-4a8d68f3d327b3f1bdaffa9540d4460afdb283c4.zip
MOHAWK: implement setGlobalEnable and setGlobalVisible for LB
svn-id: r54771
-rw-r--r--engines/mohawk/livingbooks.cpp75
-rw-r--r--engines/mohawk/livingbooks.h6
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();