[Scummvm-cvs-logs] SF.net SVN: scummvm:[47042] scummvm/trunk/engines/teenagent/teenagent.cpp

megath at users.sourceforge.net megath at users.sourceforge.net
Tue Jan 5 21:58:41 CET 2010


Revision: 47042
          http://scummvm.svn.sourceforge.net/scummvm/?rev=47042&view=rev
Author:   megath
Date:     2010-01-05 20:58:41 +0000 (Tue, 05 Jan 2010)

Log Message:
-----------
more accurate timings.

Modified Paths:
--------------
    scummvm/trunk/engines/teenagent/teenagent.cpp

Modified: scummvm/trunk/engines/teenagent/teenagent.cpp
===================================================================
--- scummvm/trunk/engines/teenagent/teenagent.cpp	2010-01-05 20:52:19 UTC (rev 47041)
+++ scummvm/trunk/engines/teenagent/teenagent.cpp	2010-01-05 20:58:41 UTC (rev 47042)
@@ -450,13 +450,17 @@
 
 	CursorMan.showMouse(true);
 
-	uint32 frame = 0;
+	///\todo move game timers to the option dialog
+	const uint32 kGameDelay = 110, kMarkDelay = 80;
 
+	uint32 game_timer = kGameDelay;
+	uint32 mark_timer = kMarkDelay;
+
 	Common::Event event;
 	Common::Point mouse;
+	uint32 timer = _system->getMillis();
 
 	do {
-		uint32 t0 = _system->getMillis();
 		Object *current_object = scene->findObject(mouse);
 
 		while (_event->pollEvent(event)) {
@@ -509,16 +513,24 @@
 		_system->showMouse(scene->getMessage().empty());
 		//game delays: slow 16, normal 11, fast 5, crazy 1
 		//mark delays: 4 * (3 - hero_speed), normal == 1
-		uint32 f0 = frame * 10 / 25, f1 = (frame + 1) * 10 / 25;
-		if (f0 != f1) {
+		//game delays in 1/100th of seconds
+		uint32 new_timer = _system->getMillis();
+		uint32 delta = new_timer - timer;
+		timer = new_timer;
+
+		if (game_timer <= delta) {
 			bool b = scene->render();
-			scene_busy = b;
-			if (!inventory->active() && !scene_busy && action != kActionNone) {
+			if (!inventory->active() && !b && action != kActionNone) {
 				processObject();
 				action = kActionNone;
 				dst_object = NULL;
 			}
-		}
+
+			scene_busy = b;
+			game_timer = kGameDelay - ((delta - game_timer) % kGameDelay);
+		} else
+			game_timer -= delta;
+
 		bool busy = inventory->active() || scene_busy;
 
 		Graphics::Surface *surface = _system->lockScreen();
@@ -555,11 +567,10 @@
 			console->onFrame();
 		}
 
-		uint32 dt = _system->getMillis() - t0;
-		if (dt < 40)
-			_system->delayMillis(40 - dt);
-
-		++frame;
+		uint32 next_tick = MIN(game_timer, mark_timer);
+		if (next_tick > 0) {
+			_system->delayMillis(next_tick > 40? 40: next_tick);
+		}
 	} while (!_event->shouldQuit());
 
 	deinit();


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list