X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fapp%2FApplication.h;h=b7b0001f7bbbf874a193f7a8dbaeb0e2cd50a07a;hb=2a1d9169e1f6c2dfe0f93ed40d5fb68d3da342af;hp=dcc5e006c0dc36d28b65859bcbb048761cfc96be;hpb=c8bfdbd3b824fdd71bca1335a145aa19c42df1db;p=l2e.git diff --git a/src/app/Application.h b/src/app/Application.h index dcc5e00..b7b0001 100644 --- a/src/app/Application.h +++ b/src/app/Application.h @@ -8,7 +8,9 @@ #ifndef APP_APPLICATION_H_ #define APP_APPLICATION_H_ +#include "fwd.h" #include "Input.h" +#include "Timer.h" #include "../sdl/InitScreen.h" #include @@ -18,8 +20,6 @@ namespace app { -class State; - class Application { public: @@ -40,10 +40,21 @@ public: void Quit(); Input &Buttons() { return input; } const Input &Buttons() const { return input; } + Timers &GlobalTimers() { return globalTimers; } + +private: + struct StateCommand { + enum Type { + PUSH, POP, CHANGE + } type; + State *state; + }; private: State *CurrentState(); + bool StateChangePending() const { return !stateChanges.empty(); } void UpdateState(); + void RealChangeState(State *); void RealPushState(State *); void RealPopState(); void PopAllStates(); @@ -56,10 +67,10 @@ private: private: sdl::InitScreen *screen; std::stack states; - std::queue toPush; + std::queue stateChanges; + Timers globalTimers; Input input; Uint32 last; - int toPop; };