]> git.localhorst.tv Git - l2e.git/blobdiff - src/app/State.h
removed stupid file headers that eclipse put in
[l2e.git] / src / app / State.h
index 28cb94d5d978179e2828f132aa6819875a5fd241..19b6fe0475fbb340a81941d193ca2c01af69ff2b 100644 (file)
@@ -1,10 +1,3 @@
-/*
- * State.h
- *
- *  Created on: Apr 8, 2012
- *      Author: holy
- */
-
 #ifndef APP_APPLICATIONSTATE_H_
 #define APP_APPLICATIONSTATE_H_
 
@@ -19,34 +12,55 @@ namespace app {
 class State {
 
 public:
-       virtual ~State() { };
+       State();
+       virtual ~State();
 
 public:
+       /// Called by Application when pushing this state.
+       void EnterState(Application &ctrl, SDL_Surface *screen);
+       /// 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(SDL_Surface *screen);
+       /// Called by Application when this state no longer is the top state.
+       void PauseState(SDL_Surface *screen);
+
+       /// Called by Application on SDL window resize events.
+       void Resize(int width, int height);
+
+       /// Handle interactive events such as input and timers.
+       virtual void HandleEvents(const Input &) = 0;
+       /// Update the time-dependant world representation.
+       virtual void UpdateWorld(float deltaT) = 0;
+       /// 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
        ///       propagated on stack changes.
        ///       Will be fixed soom ;).
-       virtual void Resize(int width, int height) = 0;
-
-       /// Handle interactive events such as input and timers.
-       virtual void HandleEvents(const Input &) = 0;
-       /// Update the time-dependant world representation.
-       virtual void UpdateWorld(float deltaT) = 0;
-       /// Draw a picture of the world.
-       virtual void Render(SDL_Surface *) = 0;
+       virtual void OnResize(int width, int height) = 0;
 
 public:
        /// Timers handle intended for graphics, sync'ed with render time.
@@ -59,6 +73,7 @@ public:
        Timers<float> &PhysicsTimers() { return physicsTimers; }
 
 private:
+       Application *ctrl;
        Timers<Uint32> graphicsTimers;
        Timers<float> physicsTimers;