]> git.localhorst.tv Git - l2e.git/blobdiff - src/app/State.h
commented headers in app/ directory
[l2e.git] / src / app / State.h
index efee32ba2ab0f3a3001dbbe9944ab9d8f44a58c3..41af536280c92acfff4de02172123dbdf56ad343 100644 (file)
@@ -8,30 +8,60 @@
 #ifndef APP_APPLICATIONSTATE_H_
 #define APP_APPLICATIONSTATE_H_
 
+#include "fwd.h"
+#include "Timer.h"
+
 #include <SDL.h>
 
 namespace app {
 
-class Application;
-
+/// Application state base class for use with app::Application.
 class State {
 
 public:
        virtual ~State() { };
 
 public:
-       /// do some setup
+       /// 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 EnterState(Application &ctrl, SDL_Surface *screen) = 0;
-       virtual void ExitState() = 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
+       /// 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;
 
-       virtual void HandleEvent(const SDL_Event &) = 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;
 
+public:
+       /// Timers handle intended for graphics, sync'ed with render time.
+       /// These timers are only updated for the stack top and thus appear paused
+       /// when the state is visible (roughly).
+       Timers<Uint32> &GraphicsTimers() { return graphicsTimers; }
+       /// Timers handle intended for graphics, sync'ed with world time.
+       /// These timers are only updated for the stack top and thus appear paused
+       /// when the state is visible (roughly).
+       Timers<float> &PhysicsTimers() { return physicsTimers; }
+
+private:
+       Timers<Uint32> graphicsTimers;
+       Timers<float> physicsTimers;
+
 };
 
 }