aboutsummaryrefslogtreecommitdiff
path: root/engines/sword2/animation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'engines/sword2/animation.cpp')
-rw-r--r--engines/sword2/animation.cpp25
1 files changed, 20 insertions, 5 deletions
diff --git a/engines/sword2/animation.cpp b/engines/sword2/animation.cpp
index 1452cc61dc..8c4faf4082 100644
--- a/engines/sword2/animation.cpp
+++ b/engines/sword2/animation.cpp
@@ -75,6 +75,7 @@ MoviePlayer::MoviePlayer(Sword2Engine *vm, const char *name) {
_name = strdup(name);
_mixer = _vm->_mixer;
_system = _vm->_system;
+ _pauseTicks = 0;
_textSurface = NULL;
_bgSoundStream = NULL;
_ticks = 0;
@@ -98,6 +99,10 @@ MoviePlayer::~MoviePlayer() {
free(_name);
}
+uint32 MoviePlayer::getTick() {
+ return _system->getMillis() - _pauseTicks;
+}
+
void MoviePlayer::updatePalette(byte *pal, bool packed) {
byte palette[4 * 256];
byte *p = palette;
@@ -167,7 +172,7 @@ bool MoviePlayer::checkSkipFrame() {
if ((_mixer->getSoundElapsedTime(_bgSoundHandle) * 12) / 1000 < _currentFrame + 1)
return false;
} else {
- if (_system->getMillis() <= _ticks)
+ if (getTick() <= _ticks)
return false;
}
@@ -192,9 +197,9 @@ bool MoviePlayer::syncFrame() {
// so that we can still fall back on the no-sound sync case for
// the subsequent frames.
- _ticks = _system->getMillis();
+ _ticks = getTick();
} else {
- while (_system->getMillis() < _ticks) {
+ while (getTick() < _ticks) {
_system->delayMillis(10);
}
}
@@ -392,7 +397,7 @@ void MoviePlayer::play(SequenceTextInfo *textList, uint32 numLines, int32 leadIn
savePalette();
_framesSkipped = 0;
- _ticks = _system->getMillis();
+ _ticks = getTick();
_bgSoundStream = Audio::AudioStream::openStreamFile(_name);
if (_bgSoundStream) {
@@ -497,6 +502,16 @@ void MoviePlayer::play(SequenceTextInfo *textList, uint32 numLines, int32 leadIn
restorePalette();
}
+void MoviePlayer::pauseMovie(bool pause) {
+ _mixer->pauseHandle(_bgSoundHandle, pause);
+
+ if (pause) {
+ _pauseStartTick = _system->getMillis();
+ } else {
+ _pauseTicks += (_system->getMillis() - _pauseStartTick);
+ }
+}
+
#ifdef USE_ZLIB
///////////////////////////////////////////////////////////////////////////////
@@ -840,7 +855,7 @@ bool MoviePlayerDummy::decodeFrame() {
bool MoviePlayerDummy::syncFrame() {
if ((_numSpeechLines == 0 || _currentFrame < _firstSpeechFrame) && !_mixer->isSoundHandleActive(_bgSoundHandle)) {
- _ticks = _system->getMillis();
+ _ticks = getTick();
return false;
}