]> Dogcows Code - chaz/yoink/blobdiff - src/moof/application.cc
fixed documentation about where to find licenses
[chaz/yoink] / src / moof / application.cc
index b462a0eb2efcd947317a61ffcf619f4553f83579..84f1a24040593ef2de145d117f8401314f5b3117 100644 (file)
@@ -1,24 +1,20 @@
 
-/*]  Copyright (c) 2009-2010, Charles McGarvey  [**************************
+/*]  Copyright (c) 2009-2011, Charles McGarvey  [*****************************
 **]  All rights reserved.
 *
-* vi:ts=4 sw=4 tw=75
-*
 * Distributable under the terms and conditions of the 2-clause BSD license;
 * see the file COPYING for a complete text of the license.
 *
-**************************************************************************/
+*****************************************************************************/
 
-#include <cstdlib>                                     // exit, srand
-#include <boost/noncopyable.hpp>
+#include <cstdlib>             // exit, srand
 
 #include <SDL/SDL.h>
-#include "fastevents.h"
 
 #include "application.hh"
+#include "fastevents.h"
 #include "log.hh"
 #include "settings.hh"
-#include "timer.hh"
 #include "video.hh"
 
 
@@ -27,7 +23,6 @@ namespace moof {
 
 application::application(settings& settings) :
        last_update_(timer::ticks()),
-       total_time_(SCALAR(0.0)),
        accum_(SCALAR(0.0))
 {
        unsigned random_seed;
@@ -43,17 +38,19 @@ application::application(settings& settings) :
        settings.get("framerate", framerate);
        framerate = SCALAR(1.0) / framerate;
 
-       //timer::default_source().scale(SCALAR(1.2));
-
-       //update_timer_.init(boost::bind(&application::dispatch_update, this, _1, _2),
-                                          //timestep_, timer::repeat, this);
-       next_update_ = update_timer_.expiration();
+       //update_timer_.init(boost::bind(&application::dispatch_update,
+               //this, _1, _2), timestep_, timer::repeat);
+       //add_timer(update_timer_);
+       
+       game_time_.reset(timestep_);
+       //game_time_.scale(SCALAR(0.5));
 
-       draw_timer_.init(boost::bind(&application::dispatch_draw, this, _1, _2),
-                                        framerate, timer::repeat);
+       draw_timer_.init(boost::bind(&application::dispatch_draw,
+                               this, _1, _2), framerate, timer::repeat);
        add_timer(draw_timer_);
-}
 
+       //timer::default_source().scale(SCALAR(0.2));
+}
 
 void application::dispatch_update(timer& timer, scalar t)
 {
@@ -63,49 +60,35 @@ void application::dispatch_update(timer& timer, scalar t)
        {
                switch (event.type)
                {
-                       case SDL_KEYDOWN:
-
-                               if (event.key.keysym.sym == SDLK_ESCAPE &&
-                                               (SDL_GetModState() & KMOD_CTRL) )
-                               {
-                                       // emergency escape
-                                       log_warning("escape forced");
-                                       exit(1);
-                               }
-                               break;
-
-                       case SDL_VIDEORESIZE:
-
-                               video::current()->resize(event.resize.w, event.resize.h);
-                               break;
+               case SDL_KEYDOWN:
+                       if (event.key.keysym.sym == SDLK_ESCAPE &&
+                                       (SDL_GetModState() & KMOD_CTRL))
+                       {
+                               log_warning("escape forced");
+                               exit(1);
+                       }
+                       break;
+
+               case SDL_VIDEORESIZE:
+                       video::current()->resize(event.resize.w,
+                                       event.resize.h);
+                       break;
                }
-
                handle_event(event);
        }
 
-
-       //const int MAX_FRAMESKIP = 15;
+       const int MAX_CONSECUTIVE_UPDATES = 15;
 
        log_debug("updating", timer.expiration(), "/", t);
 
-       //int i = 0;
-       //while (next_update_ < t && ++i < MAX_FRAMESKIP)
-       //{
-               //total_time_ += timestep_;
-               //update(total_time_, timestep_);
-
-               //next_update_ += timestep_;
-               //log_debug("updated", next_update_, "time:", timer::ticks());
-       //}
-       
        scalar deltaTime = t - last_update_;
        accum_ += deltaTime;
 
-       while (timestep_ <= accum_)
+       int i = 0;
+       while (timestep_ <= accum_ && i < MAX_CONSECUTIVE_UPDATES)
        {
-               log_debug("UPDATING");
-               update(total_time_, timestep_);
-               total_time_ += timestep_;
+               scalar dt = game_time_.step();
+               update(game_time_.ticks(), dt);
                accum_ -= timestep_;
        }
 
@@ -114,19 +97,16 @@ void application::dispatch_update(timer& timer, scalar t)
 
 void application::dispatch_draw(timer& timer, scalar t)
 {
-       log_debug("next update", update_timer_.expiration());
        log_debug("draw", timer.expiration(), "/", t);
 
+       // XXX temporary
+       thread::main_runloop().run_once();
+
        dispatch_update(timer, t);
 
-       //if (t < next_update_ - timestep_) return;
-       //scalar alpha = (t + timestep_ - next_update_) * inverse_timestep_;
-       //scalar alpha = (t + timestep_ - update_timer_.expiration()) * inverse_timestep_;
-       //scalar alpha = (next_update_ - t) * inverse_timestep_;
        scalar alpha = accum_ * inverse_timestep_;
-       //if (alpha < SCALAR(0.0) || SCALAR(1.0) < alpha) return;
        
-       alpha = cml::clamp(alpha, SCALAR(-1.0), SCALAR(2.0));
+       //alpha = cml::clamp(alpha, SCALAR(-1.0), SCALAR(2.0));
        if (alpha < SCALAR(0.0)) log_warning("alpha:", alpha);
        else if (alpha > SCALAR(1.0)) log_warning("alpha:", alpha);
        else log_debug("alpha:", alpha);
@@ -135,9 +115,11 @@ void application::dispatch_draw(timer& timer, scalar t)
 
        scalar begin = timer::ticks();
        video::current()->swap(t);
-
        scalar duration = timer::ticks() - begin;
-       log_debug("flip duration:", duration);
+       log_debug("flip duration:", duration, begin, timer::ticks());
+
+       log_info("draw difference:", t - last_draw_);
+       last_draw_ = t;
 }
 
 
This page took 0.021449 seconds and 4 git commands to generate.