added OverlayManager to ViewBase

This commit is contained in:
2010-06-06 00:58:11 +02:00
parent 54e14b41af
commit 50089c9755
8 changed files with 65 additions and 21 deletions
+1
View File
@@ -23,6 +23,7 @@ SET ( ENGINE_SRCS
PhysicsEntityBase.cc
ViewBase.cc
EventsBase.cc
OverlayBase.cc
Commands.cc
DrawingsGL.cc
+4 -4
View File
@@ -132,7 +132,7 @@ void ControllerBase::ProcessEvents () {
/** \brief Keyboard processing */
bool ControllerBase::OnKeyDown (const SDL_keysym &keysym) {
if (mView->SendKeyDown (keysym))
if (mView->mOverlayManager.SendKeyDown (keysym))
return true;
if (mBindings[keysym.sym].size () != 0) {
@@ -145,7 +145,7 @@ bool ControllerBase::OnKeyDown (const SDL_keysym &keysym) {
/** \brief Keyboard processing */
bool ControllerBase::OnKeyUp (const SDL_keysym &keysym) {
if (mView->SendKeyUp (keysym))
if (mView->mOverlayManager.SendKeyUp (keysym))
return true;
if (mBindings[keysym.sym].size () != 0) {
@@ -164,7 +164,7 @@ bool ControllerBase::OnKeyUp (const SDL_keysym &keysym) {
bool ControllerBase::OnMouseButtonDown (Uint8 button, Uint16 xpos, Uint16 ypos) {
MouseButton mouse_button = convert_sdl_button (button);
if (mView->SendMouseButtonDown (button, xpos, ypos))
if (mView->mOverlayManager.SendMouseButtonDown (button, xpos, ypos))
return true;
if (mBindings[mouse_button].size () != 0) {
@@ -179,7 +179,7 @@ bool ControllerBase::OnMouseButtonDown (Uint8 button, Uint16 xpos, Uint16 ypos)
bool ControllerBase::OnMouseButtonUp (Uint8 button, Uint16 xpos, Uint16 ypos) {
MouseButton mouse_button = convert_sdl_button (button);
if (mView->SendMouseButtonUp (button, xpos, ypos))
if (mView->mOverlayManager.SendMouseButtonUp (button, xpos, ypos))
return true;
if (mBindings[mouse_button].size () != 0) {
+2
View File
@@ -10,6 +10,7 @@ class Module;
class PhysicsBase;
class Events;
class EntityFactoryBase;
class OverlayManager;
struct EntityBase;
@@ -110,6 +111,7 @@ class ModelBase : public Module {
float mDeltaSec;
friend class ViewBase;
friend class OverlayManager;
friend class Engine;
friend class Controller;
};
+35 -4
View File
@@ -1,17 +1,25 @@
#ifndef OVERLAY
#define OVERLAY
#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
*/
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; };
@@ -24,6 +32,29 @@ class OverlayBase {
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
*
* \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();
#endif /* OVERLAY */
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 */
+9 -8
View File
@@ -57,8 +57,10 @@ int ViewBase::OnInit (int argc, char* argv[]) {
mCurrentFont = mFonts["console.ttf"];
SetFontColor (1., 1., 1.);
// Overlays
OverlayBasePtr console_overlay(new SimpleConsoleOverlay);
AddOverlay (console_overlay);
mOverlayManager.Register (console_overlay, 0);
//AddOverlay (console_overlay);
mDrawAxis = false;
@@ -72,9 +74,6 @@ int ViewBase::OnInit (int argc, char* argv[]) {
}
void ViewBase::OnDestroy () {
while (mOverlays.size() > 0)
mOverlays.pop_back();
std::map<std::string, OGLFT::Monochrome*>::iterator iter;
for (iter = mFonts.begin(); iter != mFonts.end(); ++iter) {
@@ -178,10 +177,7 @@ void ViewBase::Draw () {
DrawWorld ();
std::vector<OverlayBasePtr>::iterator overlay_iter;
for (overlay_iter = mOverlays.begin(); overlay_iter != mOverlays.end(); overlay_iter++) {
(*overlay_iter)->Draw();
}
mOverlayManager.Draw();
// and update the screen
SDL_GL_SwapBuffers ();
@@ -197,10 +193,13 @@ bool ViewBase::LoadFont (const char *font_name, float point_size) {
OGLFT::Monochrome *font = new OGLFT::Monochrome (font_path.c_str(), point_size);
if ( font == 0 || !font->isValid() ) {
LogError ("Could not load font %s!", font_path.c_str());
return false;
}
font->setForegroundColor(1., 1., 1.);
mFonts.insert(std::make_pair<std::string, OGLFT::Monochrome*>(font_name, font));
return true;
}
void ViewBase::SelectFont (const char *font) {
@@ -311,6 +310,7 @@ void ViewBase::Resize (int width, int height) {
}
}
/*
bool ViewBase::SendKeyDown (const SDL_keysym &keysym) {
std::vector<OverlayBasePtr>::iterator overlay_iter;
for (overlay_iter = mOverlays.begin(); overlay_iter != mOverlays.end(); overlay_iter++) {
@@ -350,6 +350,7 @@ bool ViewBase::SendMouseButtonDown (Uint8 button, Uint16 xpos, Uint16 ypos) {
return false;
}
*/
/*
* Global functions
+11 -2
View File
@@ -39,6 +39,10 @@ class ViewBase : public Module{
bool LoadFont (const char *font_name, float point_size=12);
void SelectFont (const char *font_name);
void SetFontJustification (FontJustification justification);
/** \brief Sets the color of the current font
*
* \note This function should be avoided as the glyphs have to be re-rendered
*/
void SetFontColor (float r, float g, float b);
/** \brief Draws a string at the given position using current projection
* and modelview matrices */
@@ -60,13 +64,15 @@ class ViewBase : public Module{
bool GetDrawGrid () { return mDrawGrid; };
void SetGridSize (int x, int z) { mGridSizeX = x; mGridSizeZ = z; }
void AddOverlay (OverlayBasePtr overlay) { mOverlays.push_back (overlay); };
// void AddOverlay (OverlayBasePtr overlay) { mOverlays.push_back (overlay); };
/* 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);
*/
protected:
/** \brief Initializes the system */
@@ -86,7 +92,9 @@ class ViewBase : public Module{
ModelBase *mModel;
CameraBase *mCamera;
std::vector<OverlayBasePtr> mOverlays;
OverlayManager mOverlayManager;
// std::vector<OverlayBasePtr> mOverlays;
/** \brief The height of the canvas we're drawing on */
unsigned int mWindowHeight;
@@ -107,6 +115,7 @@ class ViewBase : public Module{
std::map<std::string, OGLFT::Monochrome*> mFonts;
friend class Engine;
friend class ControllerBase;
};
}