WINTERMUTE: Split the timers from BaseGame into a separate class.
This commit is contained in:
parent
7ee757366b
commit
8f25b651e8
23 changed files with 196 additions and 62 deletions
|
@ -752,7 +752,7 @@ bool AdActor::update() {
|
|||
_tempSprite2 = _sentence->_currentSprite;
|
||||
}
|
||||
|
||||
bool timeIsUp = (_sentence->_sound && _sentence->_soundStarted && (!_sentence->_sound->isPlaying() && !_sentence->_sound->isPaused())) || (!_sentence->_sound && _sentence->_duration <= _gameRef->_timer - _sentence->_startTime);
|
||||
bool timeIsUp = (_sentence->_sound && _sentence->_soundStarted && (!_sentence->_sound->isPlaying() && !_sentence->_sound->isPaused())) || (!_sentence->_sound && _sentence->_duration <= _gameRef->getTimer()->getTime() - _sentence->_startTime);
|
||||
if (_tempSprite2 == nullptr || _tempSprite2->isFinished() || (/*_tempSprite2->_looping &&*/ timeIsUp)) {
|
||||
if (timeIsUp) {
|
||||
_sentence->finish();
|
||||
|
|
|
@ -627,7 +627,7 @@ bool AdEntity::update() {
|
|||
_tempSprite2 = _sentence->_currentSprite;
|
||||
}
|
||||
|
||||
bool timeIsUp = (_sentence->_sound && _sentence->_soundStarted && (!_sentence->_sound->isPlaying() && !_sentence->_sound->isPaused())) || (!_sentence->_sound && _sentence->_duration <= _gameRef->_timer - _sentence->_startTime);
|
||||
bool timeIsUp = (_sentence->_sound && _sentence->_soundStarted && (!_sentence->_sound->isPlaying() && !_sentence->_sound->isPaused())) || (!_sentence->_sound && _sentence->_duration <= _gameRef->getTimer()->getTime() - _sentence->_startTime);
|
||||
if (_tempSprite2 == nullptr || _tempSprite2->isFinished() || (/*_tempSprite2->_looping &&*/ timeIsUp)) {
|
||||
if (timeIsUp) {
|
||||
_sentence->finish();
|
||||
|
|
|
@ -378,7 +378,7 @@ bool AdItem::update() {
|
|||
_tempSprite2 = _sentence->_currentSprite;
|
||||
}
|
||||
|
||||
bool timeIsUp = (_sentence->_sound && _sentence->_soundStarted && (!_sentence->_sound->isPlaying() && !_sentence->_sound->isPaused())) || (!_sentence->_sound && _sentence->_duration <= _gameRef->_timer - _sentence->_startTime);
|
||||
bool timeIsUp = (_sentence->_sound && _sentence->_soundStarted && (!_sentence->_sound->isPlaying() && !_sentence->_sound->isPaused())) || (!_sentence->_sound && _sentence->_duration <= _gameRef->getTimer()->getTime() - _sentence->_startTime);
|
||||
if (_tempSprite2 == nullptr || _tempSprite2->isFinished() || (/*_tempSprite2->_looping &&*/ timeIsUp)) {
|
||||
if (timeIsUp) {
|
||||
_sentence->finish();
|
||||
|
|
|
@ -904,7 +904,7 @@ void AdObject::talk(const char *text, const char *sound, uint32 duration, const
|
|||
_sentence->setStances(stances);
|
||||
_sentence->_duration = duration;
|
||||
_sentence->_align = Align;
|
||||
_sentence->_startTime = _gameRef->_timer;
|
||||
_sentence->_startTime = _gameRef->getTimer()->getTime();
|
||||
_sentence->_currentStance = -1;
|
||||
_sentence->_font = _font == nullptr ? _gameRef->getSystemFont() : _font;
|
||||
_sentence->_freezable = _freezable;
|
||||
|
|
|
@ -931,13 +931,13 @@ bool AdScene::traverseNodes(bool doUpdate) {
|
|||
|
||||
if (_autoScroll) {
|
||||
// adjust horizontal scroll
|
||||
if (_gameRef->_timer - _lastTimeH >= _scrollTimeH) {
|
||||
int timesMissed = (_gameRef->_timer - _lastTimeH) / _scrollTimeH;
|
||||
if (_gameRef->getTimer()->getTime() - _lastTimeH >= _scrollTimeH) {
|
||||
int timesMissed = (_gameRef->getTimer()->getTime() - _lastTimeH) / _scrollTimeH;
|
||||
// Cap the amount of catch-up to avoid jittery characters.
|
||||
if (timesMissed > 2) {
|
||||
timesMissed = 2;
|
||||
}
|
||||
_lastTimeH = _gameRef->_timer;
|
||||
_lastTimeH = _gameRef->getTimer()->getTime();
|
||||
if (_offsetLeft < _targetOffsetLeft) {
|
||||
_offsetLeft += _scrollPixelsH * timesMissed;
|
||||
_offsetLeft = MIN(_offsetLeft, _targetOffsetLeft);
|
||||
|
@ -948,13 +948,13 @@ bool AdScene::traverseNodes(bool doUpdate) {
|
|||
}
|
||||
|
||||
// adjust vertical scroll
|
||||
if (_gameRef->_timer - _lastTimeV >= _scrollTimeV) {
|
||||
int timesMissed = (_gameRef->_timer - _lastTimeV) / _scrollTimeV;
|
||||
if (_gameRef->getTimer()->getTime() - _lastTimeV >= _scrollTimeV) {
|
||||
int timesMissed = (_gameRef->getTimer()->getTime() - _lastTimeV) / _scrollTimeV;
|
||||
// Cap the amount of catch-up to avoid jittery characters.
|
||||
if (timesMissed > 2) {
|
||||
timesMissed = 2;
|
||||
}
|
||||
_lastTimeV = _gameRef->_timer;
|
||||
_lastTimeV = _gameRef->getTimer()->getTime();
|
||||
if (_offsetTop < _targetOffsetTop) {
|
||||
_offsetTop += _scrollPixelsV * timesMissed;
|
||||
_offsetTop = MIN(_offsetTop, _targetOffsetTop);
|
||||
|
|
|
@ -314,9 +314,9 @@ bool AdSentence::update(TDirection dir) {
|
|||
|
||||
/*
|
||||
if (_sound) CurrentTime = _sound->GetPositionTime();
|
||||
else CurrentTime = _gameRef->_timer - _startTime;
|
||||
else CurrentTime = _gameRef->getTimer()->getTime() - _startTime;
|
||||
*/
|
||||
currentTime = _gameRef->_timer - _startTime;
|
||||
currentTime = _gameRef->getTimer()->getTime() - _startTime;
|
||||
|
||||
bool talkNodeFound = false;
|
||||
for (uint32 i = 0; i < _talkDef->_nodes.size(); i++) {
|
||||
|
@ -355,7 +355,7 @@ bool AdSentence::update(TDirection dir) {
|
|||
//////////////////////////////////////////////////////////////////////////
|
||||
bool AdSentence::canSkip() {
|
||||
// prevent accidental sentence skipping (TODO make configurable)
|
||||
return (_gameRef->_timer - _startTime) > 300;
|
||||
return (_gameRef->getTimer()->getTime() - _startTime) > 300;
|
||||
}
|
||||
|
||||
} // end of namespace Wintermute
|
||||
|
|
|
@ -106,4 +106,20 @@ BaseRenderer *BaseEngine::getRenderer() {
|
|||
}
|
||||
}
|
||||
|
||||
const Timer *BaseEngine::getTimer() {
|
||||
if (instance()._gameRef) {
|
||||
return instance()._gameRef->getTimer();
|
||||
} else {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
const Timer *BaseEngine::getLiveTimer() {
|
||||
if (instance()._gameRef) {
|
||||
return instance()._gameRef->getLiveTimer();
|
||||
} else {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
} // end of namespace Wintermute
|
||||
|
|
|
@ -42,6 +42,7 @@ class BaseGame;
|
|||
class BaseSoundMgr;
|
||||
class BaseRenderer;
|
||||
class SystemClassRegistry;
|
||||
class Timer;
|
||||
class BaseEngine : public Common::Singleton<Wintermute::BaseEngine> {
|
||||
void init(Common::Language lang);
|
||||
BaseFileManager *_fileManager;
|
||||
|
@ -64,6 +65,8 @@ public:
|
|||
BaseFileManager *getFileManager() { return _fileManager; }
|
||||
BaseSoundMgr *getSoundMgr();
|
||||
BaseRenderer *getRenderer();
|
||||
static const Timer *getTimer();
|
||||
static const Timer *getLiveTimer();
|
||||
static void LOG(bool res, const char *fmt, ...);
|
||||
const char *getGameId() { return _gameId.c_str(); }
|
||||
};
|
||||
|
|
|
@ -71,7 +71,7 @@ bool BaseFader::update() {
|
|||
if (_system) {
|
||||
time = g_system->getMillis() - _startTime;
|
||||
} else {
|
||||
time = _gameRef->_timer - _startTime;
|
||||
time = _gameRef->getTimer()->getTime() - _startTime;
|
||||
}
|
||||
|
||||
if (time >= _duration) {
|
||||
|
@ -129,7 +129,7 @@ bool BaseFader::fadeIn(uint32 sourceColor, uint32 duration, bool system) {
|
|||
if (_system) {
|
||||
_startTime = g_system->getMillis();
|
||||
} else {
|
||||
_startTime = _gameRef->_timer;
|
||||
_startTime = _gameRef->getTimer()->getTime();
|
||||
}
|
||||
|
||||
return STATUS_OK;
|
||||
|
@ -155,7 +155,7 @@ bool BaseFader::fadeOut(uint32 targetColor, uint32 duration, bool system) {
|
|||
if (_system) {
|
||||
_startTime = g_system->getMillis();
|
||||
} else {
|
||||
_startTime = _gameRef->_timer;
|
||||
_startTime = _gameRef->getTimer()->getTime();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -81,7 +81,7 @@ IMPLEMENT_PERSISTENT(BaseGame, true)
|
|||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////
|
||||
BaseGame::BaseGame(const Common::String &gameId) : BaseObject(this), _gameId(gameId) {
|
||||
BaseGame::BaseGame(const Common::String &gameId) : BaseObject(this), _gameId(gameId), _timerNormal(), _timerLive() {
|
||||
_shuttingDown = false;
|
||||
|
||||
_state = GAME_RUNNING;
|
||||
|
@ -122,14 +122,6 @@ BaseGame::BaseGame(const Common::String &gameId) : BaseObject(this), _gameId(gam
|
|||
_subtitles = true;
|
||||
_videoSubtitles = true;
|
||||
|
||||
_timer = 0;
|
||||
_timerDelta = 0;
|
||||
_timerLast = 0;
|
||||
|
||||
_liveTimer = 0;
|
||||
_liveTimerDelta = 0;
|
||||
_liveTimerLast = 0;
|
||||
|
||||
_sequence = 0;
|
||||
|
||||
_mousePos.x = _mousePos.y = 0;
|
||||
|
@ -561,16 +553,12 @@ bool BaseGame::initLoop() {
|
|||
_lastTime = _currentTime;
|
||||
_fpsTime += _deltaTime;
|
||||
|
||||
_liveTimerDelta = _liveTimer - _liveTimerLast;
|
||||
_liveTimerLast = _liveTimer;
|
||||
_liveTimer += MIN((uint32)1000, _deltaTime);
|
||||
_timerLive.updateTime(_deltaTime, 1000);
|
||||
|
||||
if (_state != GAME_FROZEN) {
|
||||
_timerDelta = _timer - _timerLast;
|
||||
_timerLast = _timer;
|
||||
_timer += MIN((uint32)1000, _deltaTime);
|
||||
_timerNormal.updateTime(_deltaTime, 1000);
|
||||
} else {
|
||||
_timerDelta = 0;
|
||||
_timerNormal.setTimeDelta(0);
|
||||
}
|
||||
|
||||
_framesRendered++;
|
||||
|
@ -1985,7 +1973,7 @@ ScValue *BaseGame::scGetProperty(const Common::String &name) {
|
|||
// CurrentTime (RO)
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
else if (name == "CurrentTime") {
|
||||
_scValue->setInt((int)_timer);
|
||||
_scValue->setInt((int)getTimer()->getTime());
|
||||
return _scValue;
|
||||
}
|
||||
|
||||
|
@ -3104,13 +3092,8 @@ bool BaseGame::persist(BasePersistenceManager *persistMgr) {
|
|||
persistMgr->transfer(TMEMBER(_videoFont));
|
||||
persistMgr->transfer(TMEMBER(_videoSubtitles));
|
||||
|
||||
persistMgr->transfer(TMEMBER(_timer));
|
||||
persistMgr->transfer(TMEMBER(_timerDelta));
|
||||
persistMgr->transfer(TMEMBER(_timerLast));
|
||||
|
||||
persistMgr->transfer(TMEMBER(_liveTimer));
|
||||
persistMgr->transfer(TMEMBER(_liveTimerDelta));
|
||||
persistMgr->transfer(TMEMBER(_liveTimerLast));
|
||||
_timerNormal.persist(persistMgr);
|
||||
_timerLive.persist(persistMgr);
|
||||
|
||||
_renderer->persistSaveLoadImages(persistMgr);
|
||||
|
||||
|
@ -3777,7 +3760,7 @@ bool BaseGame::displayDebugInfo() {
|
|||
_systemFont->drawText((byte *)str, 0, 70, _renderer->getWidth(), TAL_RIGHT);
|
||||
|
||||
|
||||
sprintf(str, "Timer: %d", _timer);
|
||||
sprintf(str, "Timer: %d", getTimer()->getTime());
|
||||
_gameRef->_systemFont->drawText((byte *)str, 0, 130, _renderer->getWidth(), TAL_RIGHT);
|
||||
|
||||
if (_activeObject != nullptr) {
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
#define WINTERMUTE_BASE_GAME_H
|
||||
|
||||
#include "engines/wintermute/base/base_object.h"
|
||||
#include "engines/wintermute/base/timer.h"
|
||||
#include "engines/wintermute/persistent.h"
|
||||
#include "engines/wintermute/coll_templ.h"
|
||||
#include "engines/wintermute/math/rect32.h"
|
||||
|
@ -214,14 +215,13 @@ public:
|
|||
TGameState _state;
|
||||
TGameState _origState;
|
||||
bool _origInteractive;
|
||||
uint32 _timer;
|
||||
uint32 _timerDelta;
|
||||
uint32 _timerLast;
|
||||
|
||||
uint32 _liveTimer;
|
||||
uint32 _liveTimerDelta;
|
||||
uint32 _liveTimerLast;
|
||||
|
||||
const Timer *getTimer() const { return &_timerNormal; }
|
||||
const Timer *getLiveTimer() const { return &_timerLive; }
|
||||
private:
|
||||
Timer _timerNormal;
|
||||
Timer _timerLive;
|
||||
public:
|
||||
BaseObject *_capturedObject;
|
||||
Point32 _mousePos;
|
||||
bool validObject(BaseObject *object);
|
||||
|
|
|
@ -177,7 +177,7 @@ bool BaseGameMusic::updateMusicCrossfade() {
|
|||
_music[_musicCrossfadeChannel2]->play();
|
||||
}
|
||||
|
||||
uint32 currentTime = _gameRef->_liveTimer - _musicCrossfadeStartTime;
|
||||
uint32 currentTime = _gameRef->getLiveTimer()->getTime() - _musicCrossfadeStartTime;
|
||||
|
||||
if (currentTime >= _musicCrossfadeLength) {
|
||||
_musicCrossfadeRunning = false;
|
||||
|
@ -469,7 +469,7 @@ bool BaseGameMusic::scCallMethod(ScScript *script, ScStack *stack, ScStack *this
|
|||
return STATUS_OK;
|
||||
}
|
||||
|
||||
_musicCrossfadeStartTime = _gameRef->_liveTimer;
|
||||
_musicCrossfadeStartTime = _gameRef->getLiveTimer()->getTime();
|
||||
_musicCrossfadeChannel1 = channel1;
|
||||
_musicCrossfadeChannel2 = channel2;
|
||||
_musicCrossfadeLength = fadeLength;
|
||||
|
|
|
@ -27,8 +27,8 @@
|
|||
*/
|
||||
|
||||
#include "engines/wintermute/base/base_parser.h"
|
||||
#include "engines/wintermute/base/base_game.h"
|
||||
#include "engines/wintermute/base/base_engine.h"
|
||||
#include "engines/wintermute/base/base_game.h"
|
||||
#include "engines/wintermute/platform_osystem.h"
|
||||
#include "common/str.h"
|
||||
#include "common/util.h"
|
||||
|
|
|
@ -365,9 +365,9 @@ bool BaseSprite::getCurrentFrame(float zoomX, float zoomY) {
|
|||
|
||||
uint32 timer;
|
||||
if (_owner && _owner->_freezable) {
|
||||
timer = _gameRef->_timer;
|
||||
timer = _gameRef->getTimer()->getTime();
|
||||
} else {
|
||||
timer = _gameRef->_liveTimer;
|
||||
timer = _gameRef->getLiveTimer()->getTime();
|
||||
}
|
||||
|
||||
int lastFrame = _currentFrame;
|
||||
|
|
|
@ -66,15 +66,15 @@ bool BaseSurfaceStorage::cleanup(bool warn) {
|
|||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
bool BaseSurfaceStorage::initLoop() {
|
||||
if (_gameRef->_smartCache && _gameRef->_liveTimer - _lastCleanupTime >= _gameRef->_surfaceGCCycleTime) {
|
||||
_lastCleanupTime = _gameRef->_liveTimer;
|
||||
if (_gameRef->_smartCache && _gameRef->getLiveTimer()->getTime() - _lastCleanupTime >= _gameRef->_surfaceGCCycleTime) {
|
||||
_lastCleanupTime = _gameRef->getLiveTimer()->getTime();
|
||||
sortSurfaces();
|
||||
for (uint32 i = 0; i < _surfaces.size(); i++) {
|
||||
if (_surfaces[i]->_lifeTime <= 0) {
|
||||
break;
|
||||
}
|
||||
|
||||
if (_surfaces[i]->_lifeTime > 0 && _surfaces[i]->_valid && (int)(_gameRef->_liveTimer - _surfaces[i]->_lastUsedTime) >= _surfaces[i]->_lifeTime) {
|
||||
if (_surfaces[i]->_lifeTime > 0 && _surfaces[i]->_valid && (int)(_gameRef->getLiveTimer()->getTime() - _surfaces[i]->_lastUsedTime) >= _surfaces[i]->_lifeTime) {
|
||||
//_gameRef->QuickMessageForm("Invalidating: %s", _surfaces[i]->_filename);
|
||||
_surfaces[i]->invalidate();
|
||||
}
|
||||
|
|
|
@ -129,7 +129,7 @@ bool BaseSurface::invalidate() {
|
|||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
bool BaseSurface::prepareToDraw() {
|
||||
_lastUsedTime = _gameRef->_liveTimer;
|
||||
_lastUsedTime = _gameRef->getLiveTimer()->getTime();
|
||||
|
||||
if (!_valid) {
|
||||
//_gameRef->LOG(0, "Reviving: %s", _filename);
|
||||
|
|
|
@ -252,7 +252,7 @@ bool PartEmitter::update() {
|
|||
if (!_running) {
|
||||
return STATUS_OK;
|
||||
} else {
|
||||
return updateInternal(_gameRef->_timer, _gameRef->_timerDelta);
|
||||
return updateInternal(_gameRef->getTimer()->getTime(), _gameRef->getTimer()->getTimeDelta());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -353,7 +353,7 @@ bool PartEmitter::start() {
|
|||
if (_overheadTime > 0) {
|
||||
uint32 delta = 500;
|
||||
int steps = _overheadTime / delta;
|
||||
uint32 currentTime = _gameRef->_timer - _overheadTime;
|
||||
uint32 currentTime = _gameRef->getTimer()->getTime() - _overheadTime;
|
||||
|
||||
for (int i = 0; i < steps; i++) {
|
||||
updateInternal(currentTime, delta);
|
||||
|
|
|
@ -1194,7 +1194,7 @@ bool ScScript::sleep(uint32 duration) {
|
|||
_waitTime = g_system->getMillis() + duration;
|
||||
_waitFrozen = true;
|
||||
} else {
|
||||
_waitTime = _gameRef->_timer + duration;
|
||||
_waitTime = _gameRef->getTimer()->getTime() + duration;
|
||||
_waitFrozen = false;
|
||||
}
|
||||
return STATUS_OK;
|
||||
|
|
|
@ -285,7 +285,7 @@ bool ScEngine::tick() {
|
|||
_scripts[i]->run();
|
||||
}
|
||||
} else {
|
||||
if (_scripts[i]->_waitTime <= _gameRef->_timer) {
|
||||
if (_scripts[i]->_waitTime <= _gameRef->getTimer()->getTime()) {
|
||||
_scripts[i]->run();
|
||||
}
|
||||
}
|
||||
|
|
74
engines/wintermute/base/timer.cpp
Normal file
74
engines/wintermute/base/timer.cpp
Normal file
|
@ -0,0 +1,74 @@
|
|||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file is based on WME Lite.
|
||||
* http://dead-code.org/redir.php?target=wmelite
|
||||
* Copyright (c) 2011 Jan Nedoma
|
||||
*/
|
||||
|
||||
#include "engines/wintermute/base/timer.h"
|
||||
#include "engines/wintermute/base/base_persistence_manager.h"
|
||||
#include "engines/wintermute/persistent.h"
|
||||
|
||||
namespace Wintermute {
|
||||
Timer::Timer() : _timer(0), _timerDelta(0), _timerLast(0) {
|
||||
|
||||
}
|
||||
|
||||
void Timer::setTime(uint32 time) {
|
||||
_timer = time;
|
||||
}
|
||||
|
||||
void Timer::setTimeDelta(uint32 timeDelta) {
|
||||
_timerDelta = timeDelta;
|
||||
}
|
||||
|
||||
void Timer::setTimeLast(uint32 timeLast) {
|
||||
_timerLast = timeLast;
|
||||
}
|
||||
|
||||
void Timer::updateTime(uint32 delta, uint32 max) {
|
||||
_timerDelta = _timer - _timerLast;
|
||||
_timerLast = _timer;
|
||||
_timer += MIN((uint32)max, delta);
|
||||
}
|
||||
|
||||
uint32 Timer::getTime() const {
|
||||
return _timer;
|
||||
}
|
||||
|
||||
uint32 Timer::getTimeDelta() const {
|
||||
return _timerDelta;
|
||||
}
|
||||
|
||||
uint32 Timer::getTimeLast() const {
|
||||
return _timerLast;
|
||||
}
|
||||
|
||||
void Timer::persist(BasePersistenceManager *persistMgr) {
|
||||
persistMgr->transfer(TMEMBER(_timer));
|
||||
persistMgr->transfer(TMEMBER(_timerDelta));
|
||||
persistMgr->transfer(TMEMBER(_timerLast));
|
||||
}
|
||||
|
||||
} // End of namespace Wintermute
|
57
engines/wintermute/base/timer.h
Normal file
57
engines/wintermute/base/timer.h
Normal file
|
@ -0,0 +1,57 @@
|
|||
/* ScummVM - Graphic Adventure Engine
|
||||
*
|
||||
* ScummVM is the legal property of its developers, whose names
|
||||
* are too numerous to list here. Please refer to the COPYRIGHT
|
||||
* file distributed with this source distribution.
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
* as published by the Free Software Foundation; either version 2
|
||||
* of the License, or (at your option) any later version.
|
||||
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file is based on WME Lite.
|
||||
* http://dead-code.org/redir.php?target=wmelite
|
||||
* Copyright (c) 2011 Jan Nedoma
|
||||
*/
|
||||
|
||||
#ifndef WINTERMUTE_TIMER_H
|
||||
#define WINTERMUTE_TIMER_H
|
||||
|
||||
#include "common/scummsys.h"
|
||||
|
||||
namespace Wintermute {
|
||||
|
||||
class BasePersistenceManager;
|
||||
|
||||
class Timer {
|
||||
uint32 _timer;
|
||||
uint32 _timerDelta;
|
||||
uint32 _timerLast;
|
||||
public:
|
||||
Timer();
|
||||
void setTime(uint32 time);
|
||||
void setTimeDelta(uint32 timeDelta);
|
||||
void setTimeLast(uint32 timeLast);
|
||||
void updateTime(uint32 delta, uint32 max);
|
||||
uint32 getTime() const;
|
||||
uint32 getTimeDelta() const;
|
||||
uint32 getTimeLast() const;
|
||||
void persist(BasePersistenceManager *persistMgr);
|
||||
};
|
||||
|
||||
|
||||
} // End of namespace Wintermute
|
||||
|
||||
#endif
|
|
@ -87,6 +87,7 @@ MODULE_OBJS := \
|
|||
base/base_viewport.o \
|
||||
base/saveload.o \
|
||||
base/save_thumb_helper.o \
|
||||
base/timer.o \
|
||||
detection.o \
|
||||
graphics/transparent_surface.o \
|
||||
math/math_util.o \
|
||||
|
|
|
@ -274,7 +274,7 @@ bool VideoTheoraPlayer::stop() {
|
|||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
bool VideoTheoraPlayer::update() {
|
||||
_currentTime = _freezeGame ? _gameRef->_liveTimer : _gameRef->_timer;
|
||||
_currentTime = _freezeGame ? _gameRef->getLiveTimer()->getTime() : _gameRef->getTimer()->getTime();
|
||||
|
||||
if (!isPlaying()) {
|
||||
return STATUS_OK;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue