aboutsummaryrefslogtreecommitdiff
path: root/engines/sludge
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
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')
-rw-r--r--engines/sludge/builtin.cpp3
-rw-r--r--engines/sludge/sludger.cpp7
-rw-r--r--engines/sludge/sludger.h1
-rw-r--r--engines/sludge/timing.cpp54
-rw-r--r--engines/sludge/timing.h24
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