fysxasteroids/engine/OverlayBase.h

71 lines
2.2 KiB
C++

#ifndef OVERLAYBASE
#define OVERLAYBASE
#include <boost/shared_ptr.hpp>
#include <SDL/SDL.h>
#include <map>
#include <list>
namespace Engine {
class ModelBase;
/** \brief Base class for user-interfaces
*
* An Overlay is something that is displayed above the game graphics e.g.
* such as a health indicator for the player or the user interface such as
* the menu or the console. The member function OverlayBase::Draw() is used
* for drawing and also receives input such as key press events and mouse
* button events.
*
* The function OverlayBase::Init() is called by the OverlayManager class and
* allows the OverlayBase to load its ressources.
*/
class OverlayBase {
public:
OverlayBase () {};
virtual ~OverlayBase() {};
/** \brief This function gets called by the OverlayManager class */
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; };
/** \brief Draws the content of the Overlay */
virtual void Draw () = 0;
};
typedef boost::shared_ptr<OverlayBase> OverlayBasePtr;
/** \brief Takes care of all OverlayBase classes and proxies input and drawing with regard to the current game state of ModelBase
*
* \note 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();
/** \brief Draws the Overlays associated with the current game state */
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<unsigned int, std::list<OverlayBasePtr> > mOverlays;
};
};
#endif /* OVERLAYBASE */