added OverlayManager to ViewBase
parent
54e14b41af
commit
50089c9755
|
@ -17,7 +17,7 @@ class MenuOverlay : public Engine::OverlayBase {
|
|||
public:
|
||||
MenuOverlay () {
|
||||
};
|
||||
void Init ();
|
||||
virtual void Init ();
|
||||
virtual ~MenuOverlay() {};
|
||||
|
||||
virtual bool OnKeyDown (const SDL_keysym &keysym);
|
||||
|
|
|
@ -34,13 +34,13 @@ int View::OnInit (int argc, char* argv[]) {
|
|||
mMenuOverlay->SetModel ((Model*) mModel);
|
||||
mMenuOverlay->SetView (this);
|
||||
mMenuOverlay->Init();
|
||||
AddOverlay (mMenuOverlay);
|
||||
mOverlayManager.Register (mMenuOverlay, GameStateMainMenu);
|
||||
|
||||
// We want the console
|
||||
mConsoleOverlay = boost::shared_ptr<Engine::SimpleConsoleOverlay> (new Engine::SimpleConsoleOverlay);
|
||||
// We also want to display the log bar
|
||||
mConsoleOverlay->SetDrawLogBar (true);
|
||||
AddOverlay (mConsoleOverlay);
|
||||
mOverlayManager.Register (mConsoleOverlay, GameStateMainMenu);
|
||||
|
||||
// This is a simple star field that makes the game so spacy
|
||||
int i;
|
||||
|
|
|
@ -23,6 +23,7 @@ SET ( ENGINE_SRCS
|
|||
PhysicsEntityBase.cc
|
||||
ViewBase.cc
|
||||
EventsBase.cc
|
||||
OverlayBase.cc
|
||||
|
||||
Commands.cc
|
||||
DrawingsGL.cc
|
||||
|
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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 */
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue