--- /dev/null
+/*
+ * Application.h
+ *
+ * Created on: Apr 8, 2012
+ * Author: holy
+ */
+
+#ifndef APP_APPLICATION_H_
+#define APP_APPLICATION_H_
+
+#include "Control.h"
+#include "Timer.h"
+#include "../sdl/InitScreen.h"
+
+#include <stack>
+#include <SDL/SDL.h>
+
+
+namespace app {
+
+class State;
+
+class Application
+: public Control {
+
+ public:
+ explicit Application(sdl::InitScreen *screen, State *initialState);
+ virtual ~Application(void);
+ private:
+ Application(const Application &);
+ Application &operator =(const Application &);
+
+ public:
+ void Run(void);
+ void Loop(void);
+
+ public:
+ virtual void ChangeState(State *);
+ virtual void PushState(State *);
+ virtual void PopState(void);
+ virtual void Quit(void);
+
+ private:
+ State *CurrentState(void);
+ void RealPushState(State *);
+ void RealPopState(void);
+ void PopAllStates(void);
+
+ private:
+ void HandleEvents(void);
+ void UpdateWorld(Uint32 deltaT);
+ void Render(void);
+
+ private:
+ sdl::InitScreen *screen;
+ std::stack<State *> states;
+ Timer timer;
+ Uint32 last;
+
+};
+
+}
+
+#endif /* APP_APPLICATION_H_ */