X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fapp%2FState.h;h=19b6fe0475fbb340a81941d193ca2c01af69ff2b;hb=cc3d698b8c1ad09d7a3f9e3f28bc84e0ac1735ea;hp=a84afde9941a26b0809cdd20c884f9e6ab0920be;hpb=7252571fb926a187c4c40e8f4eec718f16d63ffa;p=l2e.git diff --git a/src/app/State.h b/src/app/State.h index a84afde..19b6fe0 100644 --- a/src/app/State.h +++ b/src/app/State.h @@ -1,10 +1,3 @@ -/* - * State.h - * - * Created on: Apr 8, 2012 - * Author: holy - */ - #ifndef APP_APPLICATIONSTATE_H_ #define APP_APPLICATIONSTATE_H_ @@ -19,6 +12,7 @@ namespace app { class State { public: + State(); virtual ~State(); public: @@ -27,9 +21,9 @@ public: /// Called by Application when popping this state. void ExitState(Application &ctrl, SDL_Surface *screen); /// Called by Application when this state becomes the top state. - void ResumeState(Application &ctrl, SDL_Surface *screen); + void ResumeState(SDL_Surface *screen); /// Called by Application when this state no longer is the top state. - void PauseState(Application &ctrl, SDL_Surface *screen); + void PauseState(SDL_Surface *screen); /// Called by Application on SDL window resize events. void Resize(int width, int height); @@ -41,19 +35,26 @@ public: /// Draw a picture of the world. virtual void Render(SDL_Surface *) = 0; +protected: + /// Get a handle to the application this state is running on. + /// Do not call this while the state is off the stack (e.g. in c'tor/d'tor) + /// or you'll get a std::domain_error (potentially evil in d'tor)! + Application &Ctrl(); + const Application &Ctrl() const; + private: /// Do some setup that needs an application and/or screen handle and thus /// can not be done by the constructor. /// Called when the state first enters the stack. /// @param ctrl the Application running the state - virtual void OnEnterState(Application &ctrl, SDL_Surface *screen) = 0; + virtual void OnEnterState(SDL_Surface *screen) = 0; /// Do some cleanup. /// Called when the state is popped from the stack. - virtual void OnExitState(Application &ctrl, SDL_Surface *screen) = 0; + virtual void OnExitState(SDL_Surface *screen) = 0; /// Called when the state becomes the active one. - virtual void OnResumeState(Application &ctrl, SDL_Surface *screen) = 0; + virtual void OnResumeState(SDL_Surface *screen) = 0; /// Called when the state becomes inactive. - virtual void OnPauseState(Application &ctrl, SDL_Surface *screen) = 0; + virtual void OnPauseState(SDL_Surface *screen) = 0; /// Adapt the state's graphics to given dimensions. /// NOTE: currently, this is only called for the stack top and not @@ -72,6 +73,7 @@ public: Timers &PhysicsTimers() { return physicsTimers; } private: + Application *ctrl; Timers graphicsTimers; Timers physicsTimers;