diff options
author | Thanasis Antoniou | 2019-09-01 16:39:03 +0300 |
---|---|---|
committer | Thanasis Antoniou | 2019-09-01 16:39:36 +0300 |
commit | fd7fd3a18b7310aef8203ef5be2b37a9fc3eaed7 (patch) | |
tree | 3a0cc5e0d32a36a29999f77d7783b2efe768da93 /engines/bladerunner/outtake.cpp | |
parent | a37f35695c21106d49ce7a3991e9cddd487e9eda (diff) | |
download | scummvm-rg350-fd7fd3a18b7310aef8203ef5be2b37a9fc3eaed7.tar.gz scummvm-rg350-fd7fd3a18b7310aef8203ef5be2b37a9fc3eaed7.tar.bz2 scummvm-rg350-fd7fd3a18b7310aef8203ef5be2b37a9fc3eaed7.zip |
BLADERUNNER: Isolate new frame limiter code in new class
Diffstat (limited to 'engines/bladerunner/outtake.cpp')
-rw-r--r-- | engines/bladerunner/outtake.cpp | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/engines/bladerunner/outtake.cpp b/engines/bladerunner/outtake.cpp index ba02bda21e..2f49099455 100644 --- a/engines/bladerunner/outtake.cpp +++ b/engines/bladerunner/outtake.cpp @@ -24,6 +24,7 @@ #include "bladerunner/bladerunner.h" #include "bladerunner/chapters.h" +#include "bladerunner/framelimiter.h" #include "bladerunner/subtitles.h" #include "bladerunner/vqa_player.h" #include "bladerunner/time.h" @@ -37,10 +38,16 @@ namespace BladeRunner { OuttakePlayer::OuttakePlayer(BladeRunnerEngine *vm) { _vm = vm; _surfaceVideo.create(_vm->_surfaceBack.w, _vm->_surfaceBack.h, _vm->_surfaceBack.format); + _framelimiter = new Framelimiter(_vm, Framelimiter::kDefaultFpsRate, Framelimiter::kDefaultUseDelayMillis); } OuttakePlayer::~OuttakePlayer() { _surfaceVideo.free(); + + if (_framelimiter) { + delete _framelimiter; + _framelimiter = nullptr; + } } void OuttakePlayer::play(const Common::String &name, bool noLocalization, int container) { @@ -70,28 +77,20 @@ void OuttakePlayer::play(const Common::String &name, bool noLocalization, int co _vm->_vqaIsPlaying = true; _vm->_vqaStopIsRequested = false; - uint32 timeNow = 0; - bool firstFrame = true; - _timeLast = _vm->_time->currentSystem(); + _framelimiter->init(); while (!_vm->_vqaStopIsRequested && !_vm->shouldQuit()) { _vm->handleEvents(); if (!_vm->_windowIsActive) { - _timeLast = _vm->_time->currentSystem(); + _framelimiter->init(); continue; } - timeNow = _vm->_time->currentSystem(); - // unsigned difference is intentional - if (timeNow - _timeLast < _vm->kUpdateFrameTimeInMs && !firstFrame) { + if (!_framelimiter->shouldExecuteScreenUpdate()) { continue; } - if (firstFrame) { - firstFrame = false; - } - int frame = vqaPlayer.update(); blit(_surfaceVideo, _vm->_surfaceFront); // This helps to make subtitles disappear properly, if the video is rendered in separate surface and then pushed to the front surface if (frame == -3) { // end of video @@ -103,7 +102,7 @@ void OuttakePlayer::play(const Common::String &name, bool noLocalization, int co _vm->_subtitles->tickOuttakes(_vm->_surfaceFront); _vm->blitToScreen(_vm->_surfaceFront); } - _timeLast = timeNow; + _framelimiter->postScreenUpdate(); } _vm->_vqaIsPlaying = false; |