#ifndef OVERLAYBASE #define OVERLAYBASE #include #include #include #include namespace Engine { class ModelBase; /** \brief Base class for user-interfaces */ class OverlayBase { public: OverlayBase () {}; virtual ~OverlayBase() {}; virtual void Init() {}; virtual bool OnKeyDown (const SDL_keysym &keysym) { return false; }; virtual bool OnKeyUp (const SDL_keysym &keysym) { return false; }; virtual bool OnMouseButtonUp (Uint8 button, Uint16 xpos, Uint16 ypos) { return false; }; virtual bool OnMouseButtonDown (Uint8 button, Uint16 xpos, Uint16 ypos) { return false; }; virtual void Draw () = 0; void _strange_function_for_vtable () {}; }; typedef boost::shared_ptr OverlayBasePtr; /** \brief Takes care of all OverlayBase classes and proxies input and drawing with regard to the current game state of ModelBase * * \node You need to set the ModelBase pointer manually by calling OverlayManager::SetModel()! */ class OverlayManager { public: /** \brief Calls OverlayBase::Init() for all registered Overlays */ void InitOverlays(); void Draw(); void Register (OverlayBasePtr overlay, unsigned int game_state); /* Input forwarding for the overlays */ bool SendKeyDown (const SDL_keysym &keysym); bool SendKeyUp (const SDL_keysym &keysym); bool SendMouseButtonUp (Uint8 button, Uint16 xpos, Uint16 ypos); bool SendMouseButtonDown (Uint8 button, Uint16 xpos, Uint16 ypos); private: /** \brief Keeps the list of OverlayBase for each game state */ std::map > mOverlays; }; }; #endif /* OVERLAYBASE */