diff options
Diffstat (limited to 'engines/sword2/animation.cpp')
| -rw-r--r-- | engines/sword2/animation.cpp | 25 |
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; } |
