renamed libpg to libbear
[physics.git] / src / main.cpp
index 2744e86..988f5d1 100644 (file)
  *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#include <bear/debug.h>
+#include <bear/Timer.h>
+using namespace bear;
+
+#include <iostream>
+using std::cout;
+using std::endl;
+
 #include <GL/gl.h>
 #include <GL/glu.h>
 #include <SDL/SDL.h>
 
-#include "debug.h"
 #include "handleSignal.h"
 
 #include "game.h"
-#include "ticks.h"
 
 #include "graphics/graphics.h"
 #include "input/inputManager.h"
@@ -74,9 +80,14 @@ static const int s_iMinWaitMicro = s_iMinWaitMilli * 1000;
 static int      s_iTargetUPS     = 100;
 static float    s_fAccUpdateWait = 0;
 
+static int      s_iTargetFPS     = 100;
+static float    s_fAccDrawWait   = 0;
+
 static int s_iUPS, s_iFPS;
 static int s_iUpdateCount, s_iDrawCount;
-static MICRO s_micLastSecond;
+
+static Ticks s_micLastSecond;
+static Timer s_timer;
 
 static const float s_fGameStep    = 10;
 
@@ -100,10 +111,14 @@ void mainInit()
     installSignal();
 
     debug::init();
+
+    s_timer.init();
 }
 void mainClean()
 {
-    debug::clean();
+    s_timer.fini();
+
+    debug::fini();
 }
 
 void updatesInit()
@@ -168,7 +183,7 @@ void run()
 void updateFPSCounters()
 {
     // Check if a second has passed to recalculate UPS and FPS
-    if (tickCountMicro() - s_micLastSecond >= 1000000)
+    if (s_timer.query() - s_micLastSecond >= 1000000)
     {
         s_iUPS = s_iUpdateCount;
         s_iFPS = s_iDrawCount;
@@ -177,7 +192,7 @@ void updateFPSCounters()
         s_iUpdateCount -= s_iUPS;
         s_iDrawCount -= s_iFPS;
 
-        s_micLastSecond = tickCountMicro();
+        s_micLastSecond = s_timer.query();
 
         if(cfg::showFPS())
         {
@@ -224,23 +239,25 @@ int startUpdateThread(void*)
 {
     updatesInit();
 
-    s_micLastSecond = tickCountMicro();
+    s_micLastSecond = s_timer.query();
 
     while(s_bIsRunning)
     {
-        MICRO time = tickCountMicro();
+        Timer timer;
+        timer.init();
             handleInput();
             update(s_fGameStep);
 
             updateFPSCounters();
-        time = tickCountMicro() - time;
+        const Ticks ticks = timer.query();
+        timer.fini();
 
-        float wait = (1000000.0 / s_iTargetUPS - time);
+        float wait = (1000000.0 / s_iTargetUPS - ticks.microseconds());
         s_fAccUpdateWait += 0 < wait ? wait : 0;
 
         if(s_iMinWaitMicro < s_fAccUpdateWait)
         {
-            int iWaits = s_fAccUpdateWait / s_iMinWaitMicro;
+            int iWaits = (int)(s_fAccUpdateWait / s_iMinWaitMicro);
             s_fAccUpdateWait -= iWaits * s_iMinWaitMicro;
             SDL_Delay(iWaits * s_iMinWaitMilli);
         }
@@ -257,7 +274,21 @@ int startDrawThread(void*)
 
     while(s_bIsRunning)
     {
-        draw();
+        Timer timer;
+        timer.init();
+            draw();
+        const Ticks ticks = timer.query();
+        timer.fini();
+
+        float wait = (1000000.0 / s_iTargetFPS - ticks.microseconds());
+        s_fAccDrawWait += 0 < wait ? wait : 0;
+
+        if(s_iMinWaitMicro < s_fAccDrawWait)
+        {
+            int iWaits = (int)(s_fAccDrawWait / s_iMinWaitMicro);
+            s_fAccDrawWait -= iWaits * s_iMinWaitMicro;
+            SDL_Delay(iWaits * s_iMinWaitMilli);
+        }
     }
 
     drawClean();