* 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"
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;
installSignal();
debug::init();
+
+ s_timer.init();
}
void mainClean()
{
- debug::clean();
+ s_timer.fini();
+
+ debug::fini();
}
void updatesInit()
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;
s_iUpdateCount -= s_iUPS;
s_iDrawCount -= s_iFPS;
- s_micLastSecond = tickCountMicro();
+ s_micLastSecond = s_timer.query();
if(cfg::showFPS())
{
{
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);
}
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();