#ifndef APP_APPLICATIONSTATE_H_
#define APP_APPLICATIONSTATE_H_
+#include "Timer.h"
+
#include <SDL.h>
namespace app {
class Application;
+class Input;
class State {
public:
/// do some setup
+ /// called when the state first enters the stack
/// @param ctrl the Application running the state
virtual void EnterState(Application &ctrl, SDL_Surface *screen) = 0;
- virtual void ExitState() = 0;
-
- virtual void HandleEvent(const SDL_Event &) = 0;
+ /// do some cleanup
+ /// called when the state is popped from the stack
+ virtual void ExitState(Application &ctrl, SDL_Surface *screen) = 0;
+ /// called when the state becomes the active one
+ virtual void ResumeState(Application &ctrl, SDL_Surface *screen) = 0;
+ /// called when the state becomes inactive
+ virtual void PauseState(Application &ctrl, SDL_Surface *screen) = 0;
+
+ /// adapt the state's graphics to given dimensions
+ virtual void Resize(int width, int height) = 0;
+
+ virtual void HandleEvents(const Input &) = 0;
virtual void UpdateWorld(float deltaT) = 0;
virtual void Render(SDL_Surface *) = 0;
+public:
+ Timers<Uint32> &GraphicsTimers() { return graphicsTimers; }
+ Timers<float> &PhysicsTimers() { return physicsTimers; }
+
+private:
+ Timers<Uint32> graphicsTimers;
+ Timers<float> physicsTimers;
+
};
}