diff options
| -rw-r--r-- | engines/mohawk/livingbooks.cpp | 27 | ||||
| -rw-r--r-- | engines/mohawk/livingbooks.h | 10 | 
2 files changed, 19 insertions, 18 deletions
diff --git a/engines/mohawk/livingbooks.cpp b/engines/mohawk/livingbooks.cpp index 9fbf99a790..d51e06890e 100644 --- a/engines/mohawk/livingbooks.cpp +++ b/engines/mohawk/livingbooks.cpp @@ -1622,7 +1622,7 @@ void LBItem::update() {  	if (_nextTime == 0 || _nextTime > (uint32)(_vm->_system->getMillis() / 16))  		return; -	if (togglePlaying(_playing)) { +	if (togglePlaying(_playing, true)) {  		_nextTime = 0;  	} else if (_loops == 0 && _timingMode == 2) {  		debug(9, "Looping in update()"); @@ -1647,15 +1647,14 @@ void LBItem::handleMouseUp(Common::Point pos) {  	runScript(kLBActionMouseUp);  } -bool LBItem::togglePlaying(bool playing) { +bool LBItem::togglePlaying(bool playing, bool restart) {  	if (playing) {  		_vm->queueDelayedEvent(DelayedEvent(this, kLBDone));  		return true;  	}  	if (!_neverEnabled && _enabled && !_playing) { -		_playing = togglePlaying(true); +		_playing = togglePlaying(true, restart);  		if (_playing) { -			seek(1); // TODO: this is not good in many situations  			_nextTime = 0;  			_startTime = _vm->_system->getMillis() / 16; @@ -1689,7 +1688,7 @@ void LBItem::done(bool onlyNotify) {  			// TODO: does drag box need adjusting?  		} -		if (_loops && _loops--) { +		if (_loops && --_loops) {  			debug(9, "Real looping (now 0x%04x left)", _loops);  			setNextTime(_delayMin, _delayMax, _startTime);  		} else @@ -1876,9 +1875,9 @@ LBSoundItem::~LBSoundItem() {  	_vm->_sound->stopSound(_resourceId);  } -bool LBSoundItem::togglePlaying(bool playing) { +bool LBSoundItem::togglePlaying(bool playing, bool restart) {  	if (!playing) -		return LBItem::togglePlaying(playing); +		return LBItem::togglePlaying(playing, restart);  	_vm->_sound->stopSound(_resourceId); @@ -1944,11 +1943,11 @@ bool LBGroupItem::contains(Common::Point point) {  	return false;  } -bool LBGroupItem::togglePlaying(bool playing) { +bool LBGroupItem::togglePlaying(bool playing, bool restart) {  	for (uint i = 0; i < _groupEntries.size(); i++) {  		LBItem *item = _vm->getItemById(_groupEntries[i].entryId);  		if (item) -			item->togglePlaying(playing); +			item->togglePlaying(playing, restart);  	}  	return false; @@ -2176,9 +2175,9 @@ void LBLiveTextItem::handleMouseDown(Common::Point pos) {  	return LBItem::handleMouseDown(pos);  } -bool LBLiveTextItem::togglePlaying(bool playing) { +bool LBLiveTextItem::togglePlaying(bool playing, bool restart) {  	if (!playing) -		return LBItem::togglePlaying(playing); +		return LBItem::togglePlaying(playing, restart);  	if (_neverEnabled || !_enabled)  		return _running; @@ -2308,9 +2307,11 @@ void LBAnimationItem::update() {  	LBItem::update();  } -bool LBAnimationItem::togglePlaying(bool playing) { +bool LBAnimationItem::togglePlaying(bool playing, bool restart) {  	if (playing) {  		if (!_neverEnabled && _enabled) { +			if (restart) +				seek(1);  			_running = true;  			_anim->start();  		} @@ -2318,7 +2319,7 @@ bool LBAnimationItem::togglePlaying(bool playing) {  		return _running;  	} -	return LBItem::togglePlaying(playing); +	return LBItem::togglePlaying(playing, restart);  }  void LBAnimationItem::done(bool onlyNotify) { diff --git a/engines/mohawk/livingbooks.h b/engines/mohawk/livingbooks.h index 5dc0e921bf..288cee9b2b 100644 --- a/engines/mohawk/livingbooks.h +++ b/engines/mohawk/livingbooks.h @@ -217,7 +217,7 @@ public:  	virtual void handleMouseDown(Common::Point pos); // 0xB  	virtual void handleMouseMove(Common::Point pos); // 0xC  	virtual void handleMouseUp(Common::Point pos); // 0xD -	virtual bool togglePlaying(bool playing); // 0xF +	virtual bool togglePlaying(bool playing, bool restart = false); // 0xF  	virtual void done(bool onlyNotify); // 0x10  	virtual void init() { } // 0x11  	virtual void seek(uint16 pos) { } // 0x13 @@ -259,7 +259,7 @@ public:  	LBSoundItem(MohawkEngine_LivingBooks *_vm, Common::Rect rect);  	~LBSoundItem(); -	bool togglePlaying(bool playing); +	bool togglePlaying(bool playing, bool restart);  	void stop();  }; @@ -276,7 +276,7 @@ public:  	void setEnabled(bool enabled);  	bool contains(Common::Point point); -	bool togglePlaying(bool playing); +	bool togglePlaying(bool playing, bool restart);  	// 0x12  	void seek(uint16 pos);  	void setVisible(bool visible); @@ -322,7 +322,7 @@ public:  	bool contains(Common::Point point);  	void update();  	void handleMouseDown(Common::Point pos); -	bool togglePlaying(bool playing); +	bool togglePlaying(bool playing, bool restart);  	void stop();  	void notify(uint16 data, uint16 from); @@ -361,7 +361,7 @@ public:  	bool contains(Common::Point point);  	void update();  	void draw(); -	bool togglePlaying(bool playing); +	bool togglePlaying(bool playing, bool restart);  	void done(bool onlyNotify);  	void init();  	void seek(uint16 pos);  | 
