aboutsummaryrefslogtreecommitdiff
path: root/engines/pegasus/timers.cpp
diff options
context:
space:
mode:
authorMatthew Hoops2011-12-19 18:06:56 -0500
committerMatthew Hoops2011-12-19 18:06:56 -0500
commitfa92148098c2ea5302e6b324e289fed118d6ace3 (patch)
tree0e9665bdf42f8dfa84e34ca1ae546914a081d2d7 /engines/pegasus/timers.cpp
parentf72884cb7bbe594888f6d14a3e03c7839ef2c508 (diff)
downloadscummvm-rg350-fa92148098c2ea5302e6b324e289fed118d6ace3.tar.gz
scummvm-rg350-fa92148098c2ea5302e6b324e289fed118d6ace3.tar.bz2
scummvm-rg350-fa92148098c2ea5302e6b324e289fed118d6ace3.zip
PEGASUS: Fix timers starting when paused
TimeBase now has its own pause time adjustment instead of using getTotalPlayTime()
Diffstat (limited to 'engines/pegasus/timers.cpp')
-rwxr-xr-xengines/pegasus/timers.cpp9
1 files changed, 7 insertions, 2 deletions
diff --git a/engines/pegasus/timers.cpp b/engines/pegasus/timers.cpp
index a5cfa44a45..49071a2936 100755
--- a/engines/pegasus/timers.cpp
+++ b/engines/pegasus/timers.cpp
@@ -67,6 +67,7 @@ TimeBase::TimeBase(const TimeScale preferredScale) {
_stopScale = 1;
_master = 0;
_pausedRate = 0;
+ _pauseStart = 0;
((PegasusEngine *)g_engine)->addTimeBase(this);
}
@@ -118,6 +119,7 @@ void TimeBase::pause() {
_pausedRate = getRate();
stop();
_paused = true;
+ _pauseStart = g_system->getMillis();
}
}
@@ -125,6 +127,9 @@ void TimeBase::resume() {
if (_paused) {
setRate(_pausedRate);
_paused = false;
+
+ if (isRunning())
+ _lastMillis += g_system->getMillis() - _pauseStart;
}
}
@@ -200,9 +205,9 @@ void TimeBase::setMasterTimeBase(TimeBase *tb) {
void TimeBase::updateTime() {
if (_lastMillis == 0) {
- _lastMillis = g_engine->getTotalPlayTime();
+ _lastMillis = g_system->getMillis();
} else {
- uint32 curTime = g_engine->getTotalPlayTime();
+ uint32 curTime = g_system->getMillis();
if (_lastMillis == curTime) // No change
return;