-/*
- * State.h
- *
- * Created on: Apr 8, 2012
- * Author: holy
- */
-
#ifndef APP_APPLICATIONSTATE_H_
#define APP_APPLICATIONSTATE_H_
class State {
public:
+ State();
virtual ~State();
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);
/// 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
Timers<float> &PhysicsTimers() { return physicsTimers; }
private:
+ Application *ctrl;
Timers<Uint32> graphicsTimers;
Timers<float> physicsTimers;