1
0
forked from 0ad/0ad
0ad/source/graphics/GameView.h
Ykkrosh 2790981eae CVSROOT: doesn't seem particularly useful now
ObjectBase: removed support for old actor format
Various: reduced sometimes-unnecessary header inclusions
Atlas: slightly nicer tool and message systems

This was SVN commit r2816.
2005-09-30 00:59:42 +00:00

124 lines
3.6 KiB
C++
Executable File

#ifndef _GameView_H
#define _GameView_H
#include "Camera.h"
#include "Vector3D.h"
#include "scripting/ScriptableObject.h"
// note: cannot forward declare SDL_Event since it is a nameless union
// in the standard SDL library and a nameless struct in wsdl, so
// include the full SDL header instead.
#include "sdl.h"
class CGame;
class CGameAttributes;
class CWorld;
class CTerrain;
class CUnitManager;
class CProjectileManager;
class CModel;
class CGameView: public CJSObject<CGameView>
{
CGame *m_pGame;
CWorld *m_pWorld;
CTerrain *m_Terrain;
CCamera m_Camera;
////////////////////////////////////////
// Settings
float m_ViewScrollSpeed;
float m_ViewRotateSensitivity;
float m_ViewRotateSensitivityKeyboard;
float m_ViewRotateAboutTargetSensitivity;
float m_ViewRotateAboutTargetSensitivityKeyboard;
float m_ViewDragSensitivity;
float m_ViewZoomSensitivityWheel;
float m_ViewZoomSensitivity;
float m_ViewZoomSmoothness; // 0.0 = instantaneous zooming, 1.0 = so slow it never moves
float m_ViewSnapSmoothness; // Just the same.
////////////////////////////////////////
// Camera Controls State
CVector3D m_CameraDelta;
CVector3D m_CameraPivot;
//float m_CameraZoom;
std::vector<CVector3D> m_CameraTargets;
// Accumulate zooming changes across frames for smoothness
float m_ZoomDelta;
// RenderTerrain: iterate through all terrain patches and submit all patches
// in viewing frustum to the renderer, for terrain painting
void RenderTerrain(CTerrain *pTerrain);
// RenderWater: iterate through all terrain patches and submit all patches
// in viewing frustum to the renderer, for water painting
void RenderWater(CTerrain *pTerrain);
// RenderModels: iterate through model list and submit all models in viewing
// frustum to the Renderer
void RenderModels(CUnitManager *pUnitMan, CProjectileManager *pProjectileManager);
// SubmitModelRecursive: recurse down given model, submitting it and all its
// descendents to the renderer
void SubmitModelRecursive(CModel *pModel);
// InitResources(): Load all graphics resources (textures, actor objects and
// alpha maps) required by the game
void InitResources();
// UnloadResources(): Unload all graphics resources loaded by InitResources
void UnloadResources();
// JS Interface
bool JSI_StartCustomSelection(JSContext *cx, uintN argc, jsval *argv);
bool JSI_EndCustomSelection(JSContext *cx, uintN argc, jsval *argv);
static void ScriptingInit();
public:
CGameView(CGame *pGame);
~CGameView();
void RegisterInit(CGameAttributes *pAttribs);
int Initialize(CGameAttributes *pGameAttributes);
// Update: Update all the view information (i.e. rotate camera, scroll,
// whatever). This will *not* change any World information - only the
// *presentation*
void Update(float DeltaTime);
// Render: Render the World
void Render();
int HandleEvent(const SDL_Event* ev);
//Keep the camera in between boundaries/smooth camera scrolling/translating
//Should call this whenever moving (translating) the camera
void CameraLock(CVector3D Trans, bool smooth=true);
void CameraLock(float x, float y, float z, bool smooth=true);
// RenderNoCull: render absolutely everything to a blank frame to force
// renderer to load required assets
void RenderNoCull();
// Camera Control Functions (used by input handler)
void ResetCamera();
void ResetCameraOrientation();
void RotateAboutTarget();
void PushCameraTarget( const CVector3D& target );
void SetCameraTarget( const CVector3D& target );
void PopCameraTarget();
inline CCamera *GetCamera()
{ return &m_Camera; }
};
extern int game_view_handler(const SDL_Event* ev);
#endif