aboutsummaryrefslogtreecommitdiff
path: root/engines/sludge/timing.cpp
diff options
context:
space:
mode:
authorSimei Yin2018-05-27 22:11:16 +0200
committerSimei Yin2018-05-27 22:11:38 +0200
commit881c94636162fc56ea9f409bce6390e959bbd6a1 (patch)
tree6d5e7130ba284186853c5e6b5c1121b3d4aa7d7d /engines/sludge/timing.cpp
parentbf3084df0eff1f21c9bc94d4254dff11e71b31bc (diff)
downloadscummvm-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/timing.cpp')
-rw-r--r--engines/sludge/timing.cpp54
1 files changed, 43 insertions, 11 deletions
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