X-Git-Url: https://git.dogcows.com/gitweb?p=chaz%2Fyoink;a=blobdiff_plain;f=src%2Fmoof%2Fapplication.cc;h=84f1a24040593ef2de145d117f8401314f5b3117;hp=b462a0eb2efcd947317a61ffcf619f4553f83579;hb=HEAD;hpb=af88821a172c4dfd138b91b2a5148ae50b502fa2 diff --git a/src/moof/application.cc b/src/moof/application.cc index b462a0e..84f1a24 100644 --- a/src/moof/application.cc +++ b/src/moof/application.cc @@ -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 // exit, srand -#include +#include // exit, srand #include -#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; }