fysxasteroids/engine/ViewBase.h

121 lines
3.4 KiB
C++

#ifndef _VIEWBASE_H
#define _VIEWBASE_H
#include "Engine.h"
#include "EngineEnums.h"
#include "OverlayBase.h"
// forward declarations for the OGLFT fonts
namespace OGLFT {
class Monochrome;
}
namespace Engine {
class Module;
class ModelBase;
class CameraBase;
/** \brief Performs the actual drawing based on Camera and Model
*/
class ViewBase : public Module{
public:
ViewBase() : mModel(NULL), mCamera(NULL), mCurrentFont(NULL) {}
virtual ~ViewBase() {};
/** \brief Resizes the View */
void Resize (int width, int height);
/** \brief Performs all drawing */
virtual void Draw ();
/* Fonts */
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 */
void DrawGLString (float x, float y, const char* str);
/** \brief Stores the eye poisition in eye_out */
void GetCamereEye (float *eye_out);
/** \brief Calculates the world coordinates to given screen coordinates */
void CalcWorldCoordinates (int screen_x, int screen_y, float world_y, float *pos_out);
unsigned int GetWindowWidth () { return mWindowWidth; };
unsigned int GetWindowHeight () { return mWindowHeight; };
int GetFrameRate() { return mFrameRate; };
void SetDrawAxis (bool draw_axis) { mDrawGrid = draw_axis; };
bool GetDrawAxis () { return mDrawGrid; };
void SetDrawGrid (bool draw_grid) { mDrawGrid = draw_grid; };
bool GetDrawGrid () { return mDrawGrid; };
void SetGridSize (int x, int z) { mGridSizeX = x; mGridSizeZ = z; }
// 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 */
virtual int OnInit (int argc, char* argv[]);
/** \brief Destroys the system (must be called!) */
virtual void OnDestroy ();
/** \brief Updates the camera for further drawing */
virtual void UpdateCamera ();
/** \brief Draws a grid of 16 x 16 tiles */
void DrawGrid ();
/** \brief Draws the level and all the visible Entities */
virtual void DrawWorld ();
/** \brief Draws orthographic overlay*/
void DrawOverlay2D ();
ModelBase *mModel;
CameraBase *mCamera;
OverlayManager mOverlayManager;
// std::vector<OverlayBasePtr> mOverlays;
/** \brief The height of the canvas we're drawing on */
unsigned int mWindowHeight;
/** \brief The width of the canvas we're drawing on */
unsigned int mWindowWidth;
/** \brief Stores the current frame rate */
int mFrameRate;
bool mDrawAxis;
bool mDrawGrid;
int mGridSizeX;
int mGridSizeZ;
/** \brief The font that is currently used */
OGLFT::Monochrome* mCurrentFont;
/** \brief Contains all the fonts that are to be used */
std::map<std::string, OGLFT::Monochrome*> mFonts;
friend class Engine;
friend class ControllerBase;
};
}
#include "ViewBaseGlobal.h"
#endif // _VIEWBase_H