From: Patrik Gornicz Date: Thu, 22 Jan 2009 01:27:30 +0000 (-0500) Subject: refactored game X-Git-Tag: physics-premerge~51 X-Git-Url: http://gitweb.pgornicz.com/gitweb.cgi?a=commitdiff_plain;h=c16d16831c89581da72905603f8ccc9212303bab;p=libbear.git refactored game --- diff --git a/src/game.cpp b/src/game.cpp index 5098ed8..e8c37a2 100644 --- a/src/game.cpp +++ b/src/game.cpp @@ -33,37 +33,35 @@ using std::vector; /// ***** Private Variables ***** // The stack of active game states -vector active_States; +static vector s_active_States; // Pointers to each possible game state -// inserted and removed from the active_States -Running* running; -Paused* paused; -CreatingPolygon* creating_Polygon; +// inserted and removed from the s_active_States +static vector s_possible_States; // true if the top state requested itself to be poped -bool pop_State; +static bool s_bPopState; // pointer to a state wishing to be added -GameState* push_State; +static GameState* s_pPushState; /// ***** Public Methods ***** void game::init() { - running = new Running(); - paused = new Paused(); - creating_Polygon = new CreatingPolygon(); - - pop_State = false; - push_State = NULL; + s_bPopState = false; + s_pPushState = NULL; // create starting entities creator::init(); + effect::init(); - active_States.push_back(running); + Running* pRunning = new Running(); + s_possible_States.push_back(pRunning); + s_possible_States.push_back(new Paused()); + s_possible_States.push_back(new CreatingPolygon()); - effect::init(); + s_active_States.push_back(pRunning); DPF(0, "World Created"); } @@ -71,88 +69,85 @@ void game::init() void game::clean() { effect::clean(); - creator::clean(); - delete creating_Polygon; - delete paused; - delete running; + for(unsigned int i=0; i < s_possible_States.size(); i++) + { + delete s_possible_States[i]; + } + s_possible_States.clear(); + s_active_States.clear(); } void game::handleInput() { creator::handleInput(); - int last = active_States.size() -1; + int iLast = s_active_States.size() -1; - if(active_States[last] != running && running->pushMe()) + for(unsigned int i=0; i < s_possible_States.size(); i++) { - push_State = running; - } + GameState* pState = s_possible_States[i]; - if(active_States[last] != paused && paused->pushMe()) - { - push_State = paused; - } - - if(active_States[last] != creating_Polygon && creating_Polygon->pushMe()) - { - push_State = creating_Polygon; + if(s_active_States[iLast] != pState && pState->pushMe()) + { + s_pPushState = pState; + } } for( int i = 0; - i <= last; + i <= iLast; i++ ) { - if( i == last ) + if( i == iLast ) { - if(active_States[i]->popMe()) - pop_State = true; + if(s_active_States[i]->popMe()) + s_bPopState = true; else - active_States[i]->handleInput(true); + s_active_States[i]->handleInput(true); } else - active_States[i]->handleInput(false); + s_active_States[i]->handleInput(false); } } -void game::update(float time_step) +void game::update(float fTimeStep) { - if(pop_State) + if(s_bPopState) { - active_States.pop_back(); - pop_State = false; + s_active_States.pop_back(); + s_bPopState = false; } - if(push_State != NULL) + if(s_pPushState != NULL) { - active_States.push_back(push_State); - push_State = NULL; + s_active_States.push_back(s_pPushState); + s_pPushState = NULL; } - int last = active_States.size() -1; + int iLast = s_active_States.size() -1; for( int i = 0; - i <= last; + i <= iLast; i++ ) { - if( i == last ) - active_States[i]->update(time_step, true); + if( i == iLast ) + s_active_States[i]->update(fTimeStep, true); else - active_States[i]->update(time_step, false); + s_active_States[i]->update(fTimeStep, false); } } void game::draw() { - int last = active_States.size() -1; + int iLast = s_active_States.size() -1; for( int i = 0; - i <= last; + i <= iLast; i++ ) { - if( i == last ) - active_States[i]->draw(true); + if( i == iLast ) + s_active_States[i]->draw(true); else - active_States[i]->draw(false); + s_active_States[i]->draw(false); } }