diff options
author | Simei Yin | 2018-05-27 22:11:16 +0200 |
---|---|---|
committer | Simei Yin | 2018-05-27 22:11:38 +0200 |
commit | 881c94636162fc56ea9f409bce6390e959bbd6a1 (patch) | |
tree | 6d5e7130ba284186853c5e6b5c1121b3d4aa7d7d /engines/sludge | |
parent | bf3084df0eff1f21c9bc94d4254dff11e71b31bc (diff) | |
download | scummvm-rg350-881c94636162fc56ea9f409bce6390e959bbd6a1.tar.gz scummvm-rg350-881c94636162fc56ea9f409bce6390e959bbd6a1.tar.bz2 scummvm-rg350-881c94636162fc56ea9f409bce6390e959bbd6a1.zip |
SLUDGE: Move global variable lastFramesPerSecond to class Timer
Diffstat (limited to 'engines/sludge')
-rw-r--r-- | engines/sludge/builtin.cpp | 3 | ||||
-rw-r--r-- | engines/sludge/sludger.cpp | 7 | ||||
-rw-r--r-- | engines/sludge/sludger.h | 1 | ||||
-rw-r--r-- | engines/sludge/timing.cpp | 54 | ||||
-rw-r--r-- | engines/sludge/timing.h | 24 |
5 files changed, 63 insertions, 26 deletions
diff --git a/engines/sludge/builtin.cpp b/engines/sludge/builtin.cpp index 0867f7cdf3..8646dd46a3 100644 --- a/engines/sludge/builtin.cpp +++ b/engines/sludge/builtin.cpp @@ -56,7 +56,6 @@ namespace Sludge { Variable *launchResult = NULL; -extern int lastFramesPerSecond; extern bool allowAnyFilename; extern VariableStack *noStack; extern StatusStuff *nowStatus; @@ -2403,7 +2402,7 @@ builtIn(_rem_launchWith) { builtIn(getFramesPerSecond) { UNUSEDALL - setVariable(fun->reg, SVT_INT, lastFramesPerSecond); + setVariable(fun->reg, SVT_INT, g_sludge->_timer.getLastFps()); return BR_CONTINUE; } diff --git a/engines/sludge/sludger.cpp b/engines/sludge/sludger.cpp index dd3b319d52..8bbf76e6ef 100644 --- a/engines/sludge/sludger.cpp +++ b/engines/sludge/sludger.cpp @@ -138,6 +138,7 @@ Common::File *openAndVerify(const Common::String &filename, char extra1, char ex } void initSludge() { + g_sludge->_timer.reset(); g_sludge->_languageMan->init(); g_sludge->_gfxMan->init(); g_sludge->_resMan->init(); @@ -161,7 +162,6 @@ void initSludge() { numGlobals = 0; launchResult = nullptr; - lastFramesPerSecond = -1; allowAnyFilename = true; noStack = nullptr; numBIFNames = numUserFunc = 0; @@ -243,7 +243,7 @@ bool initSludge(const Common::String &filename) { int specialSettings = fp->readByte(); debugC(2, kSludgeDebugDataLoad, "specialSettings : %i", specialSettings); - g_sludge->_timer.setDesiredfps(1000 / fp->readByte()); + g_sludge->_timer.setDesiredFPS(1000 / fp->readByte()); readString(fp); // Unused - was used for registration purposes. @@ -1033,7 +1033,4 @@ int startNewFunctionNum(uint funcNum, uint numParamsExpected, return 1; } -int lastFramesPerSecond = -1; -int thisFramesPerSecond = -1; - } // End of namespace Sludge diff --git a/engines/sludge/sludger.h b/engines/sludge/sludger.h index 8f554f83cb..2351cb9057 100644 --- a/engines/sludge/sludger.h +++ b/engines/sludge/sludger.h @@ -67,7 +67,6 @@ void killSludge(); void displayBase(); void sludgeDisplay(); int startNewFunctionNum(uint, uint, LoadedFunction *, VariableStack*&, bool = true); -bool handleInput(); void restartFunction(LoadedFunction *fun); bool loadFunctionCode(LoadedFunction *newFunc); void killAllFunctions(); diff --git a/engines/sludge/timing.cpp b/engines/sludge/timing.cpp index 2e3865498a..c291f57a6b 100644 --- a/engines/sludge/timing.cpp +++ b/engines/sludge/timing.cpp @@ -25,31 +25,63 @@ namespace Sludge { +Timer::Timer(){ + reset(); +} + +void Timer::reset(void) { + _desiredFPS = 300; + _startTime = 0; + _endTime = 0; + _desiredFrameTime = 0; + _addNextTime = 0; + + // FPS stats + _lastFPS = -1; + _thisFPS = -1; + _lastSeconds = 0; +} + void Timer::init(void) { - _desired_frame_time = 1000 / _desiredfps; - _starttime = g_system->getMillis(); + _desiredFrameTime = 1000 / _desiredFPS; + _startTime = g_system->getMillis(); } void Timer::initSpecial(int t) { - _desired_frame_time = 1000 / t; - _starttime = g_system->getMillis(); + _desiredFrameTime = 1000 / t; + _startTime = g_system->getMillis(); +} + +void Timer::updateFpsStats() { + uint32 currentSeconds = g_system->getMillis() / 1000; + if (_lastSeconds != currentSeconds) { + _lastSeconds = currentSeconds; + _lastFPS = _thisFPS; + _thisFPS = 1; + } else { + ++_thisFPS; + } } void Timer::waitFrame(void) { - static uint32 addNextTime = 0; uint32 timetaken; for (;;) { - _endtime = g_system->getMillis(); - timetaken = addNextTime + _endtime - _starttime; - if (timetaken >= _desired_frame_time) break; + _endTime = g_system->getMillis(); + timetaken = _addNextTime + _endTime - _startTime; + if (timetaken >= _desiredFrameTime) + break; g_system->delayMillis(1); } - addNextTime = timetaken - _desired_frame_time; - if (addNextTime > _desired_frame_time) addNextTime = _desired_frame_time; + _addNextTime = timetaken - _desiredFrameTime; + if (_addNextTime > _desiredFrameTime) + _addNextTime = _desiredFrameTime; + + _startTime = _endTime; - _starttime = _endtime; + // Stats + updateFpsStats(); } } // End of namespace Sludge diff --git a/engines/sludge/timing.h b/engines/sludge/timing.h index 0d7ffece8d..e04ddf4732 100644 --- a/engines/sludge/timing.h +++ b/engines/sludge/timing.h @@ -25,18 +25,28 @@ namespace Sludge { class Timer { -private: - int _desiredfps; // desired frames per second - uint32 _starttime, _endtime; - uint32 _desired_frame_time; - public: - void setDesiredfps(int t) { _desiredfps = t; } + Timer(); + + void setDesiredFPS(int t) { _desiredFPS = t; } + void reset(void); void init(void); void initSpecial(int t); void waitFrame(void); - Timer():_desiredfps(300), _starttime(0), _endtime(0), _desired_frame_time(0){} + int getLastFps() const { return _lastFPS; } + +private: + int _desiredFPS; // desired frames per second + uint32 _startTime, _endTime; + uint32 _desiredFrameTime; + uint32 _addNextTime; + + // FPS stats + void updateFpsStats(); + int _lastFPS; + int _thisFPS; + uint32 _lastSeconds; }; } // End of namespace Sludge |