aboutsummaryrefslogtreecommitdiff
path: root/engines/cge/cge_main.cpp
diff options
context:
space:
mode:
authorPaul Gilbert2011-07-16 22:28:49 +1000
committerPaul Gilbert2011-07-16 22:28:49 +1000
commite1df646ace3f0b487ef810a5489c3f0c2090da71 (patch)
treecf52ac9f95e7b4e1adcd1fd9903da92c60e40013 /engines/cge/cge_main.cpp
parent00061bc5dd6492fcb3be9781b134f1928f69205b (diff)
downloadscummvm-rg350-e1df646ace3f0b487ef810a5489c3f0c2090da71.tar.gz
scummvm-rg350-e1df646ace3f0b487ef810a5489c3f0c2090da71.tar.bz2
scummvm-rg350-e1df646ace3f0b487ef810a5489c3f0c2090da71.zip
CGE: Set up a separate variable for the game tick speed, independent from frame rate
Diffstat (limited to 'engines/cge/cge_main.cpp')
-rw-r--r--engines/cge/cge_main.cpp25
1 files changed, 20 insertions, 5 deletions
diff --git a/engines/cge/cge_main.cpp b/engines/cge/cge_main.cpp
index f3b2784ca6..ad31a5c1e6 100644
--- a/engines/cge/cge_main.cpp
+++ b/engines/cge/cge_main.cpp
@@ -1411,6 +1411,7 @@ void CGEEngine::loadScript(const char *fname) {
}
#define GAME_FRAME_DELAY (1000 / 50)
+#define GAME_TICK_DELAY (1000 / 62)
void CGEEngine::mainLoop() {
sayDebug();
@@ -1432,23 +1433,37 @@ void CGEEngine::mainLoop() {
_snail_->runCom();
_snail->runCom();
+ // Handle a delay between game frames
+ handleFrame();
+
+ // Handle any pending events
+ _eventManager->poll();
+}
+
+void CGEEngine::handleFrame() {
// Game frame delay
uint32 millis = g_system->getMillis();
while (!_eventManager->_quitFlag && (millis < (_lastFrame + GAME_FRAME_DELAY))) {
// Handle any pending events
_eventManager->poll();
+ if (millis >= (_lastTick + GAME_TICK_DELAY)) {
+ // Dispatch the tick to any active objects
+ tick();
+ _lastTick = millis;
+ }
+
// Slight delay
g_system->delayMillis(10);
millis = g_system->getMillis();
}
_lastFrame = millis;
- // Dispatch the tick to any active objects
- tick();
-
- // Handle any pending events
- _eventManager->poll();
+ if (millis >= (_lastTick + GAME_TICK_DELAY)) {
+ // Dispatch the tick to any active objects
+ tick();
+ _lastTick = millis;
+ }
}
void CGEEngine::tick() {