diff options
Diffstat (limited to 'hammer/mapview.h')
| -rw-r--r-- | hammer/mapview.h | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/hammer/mapview.h b/hammer/mapview.h new file mode 100644 index 0000000..4ae3f6a --- /dev/null +++ b/hammer/mapview.h @@ -0,0 +1,113 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Data and functionality common to 2D and 3D views. +// +//===========================================================================// + +#ifndef MAPVIEW_H +#define MAPVIEW_H +#ifdef _WIN32 +#pragma once +#endif + +class CWnd; +class CView; +class CMapAtom; +class CMapClass; +class CMapDoc; +class CCamera; +class CToolManager; + +#include "mathlib/vector.h" + +// +// Maximum number of hits that can be returned by ObjectsAt. +// +#define MAX_PICK_HITS 512 + +typedef struct HitInfo_s HitInfo_t; + + +enum DrawType_t +{ + VIEW_INVALID = -1, + VIEW2D_XY = 0, + VIEW2D_YZ, + VIEW2D_XZ, + + VIEW3D_WIREFRAME, + VIEW3D_POLYGON, + VIEW3D_TEXTURED, + VIEW3D_LIGHTMAP_GRID, + VIEW3D_SMOOTHING_GROUP, + VIEW3D_ENGINE, + VIEW3D_TEXTURED_SHADED, + + VIEW_LOGICAL, + + VIEW3D_LIGHTING_PREVIEW2, + VIEW3D_LIGHTING_PREVIEW_RAYTRACED, + // Must be last! + VIEW_TYPE_LAST +}; + + +#define FLAG_OBJECTS_AT_RESOLVE_INSTANCES 0x0000001 +#define FLAG_OBJECTS_AT_ONLY_SOLIDS 0x0000002 + + +class CMapView +{ +public: + + CMapView(void); + + virtual void ActivateView(bool bActivate); + inline bool IsActive(void) { return(m_bActive); } + bool IsOrthographic(); + + virtual void SetDrawType(DrawType_t eDrawType) { m_eDrawType = eDrawType; } + virtual DrawType_t GetDrawType(void) { return m_eDrawType; } + + // virtual CMapClass *ObjectAt(POINT ptClient, ULONG &ulFace) = 0; + + virtual void ProcessInput() = 0; // do input update + virtual void RenderView() = 0; // render view NOW, called usually by framework + virtual void UpdateView( int nFlags ); // something changed, render this view with the next frame + virtual bool ShouldRender(); // let view decide if it wants to render or not + + virtual CWnd *GetViewWnd() = 0; + virtual CMapDoc *GetMapDoc() = 0; + + // get axis we look along + virtual const Vector &GetViewAxis(); + void SetCamera(const Vector &vecPos, const Vector &vecLookAt); + CCamera *GetCamera() { return m_pCamera; } + + // convert client view space to map world coordinates + // general rule: float = world, int = client view + virtual void WorldToClient(Vector2D &ptClient, const Vector &vWorld) = 0; + virtual void ClientToWorld(Vector &vWorld, const Vector2D &vClient ) = 0; + virtual void BuildRay( const Vector2D &ptClient, Vector& vStart, Vector& vEnd ); + virtual int ObjectsAt( const Vector2D &ptClient, HitInfo_t *pObjects, int nMaxObjects, unsigned int nFlags = 0 ) = 0; + virtual bool HitTest( const Vector2D &ptClient, const Vector& mins, const Vector& maxs ) = 0; + virtual void GetBestTransformPlane( Vector &horzAxis, Vector &vertAxis, Vector &thirdAxis) = 0; + + bool SelectAt(const Vector2D &ptClient, bool bMakeFirst, bool bFace); + + + + // protected: + + bool m_bActive; + bool m_bUpdateView; + DrawType_t m_eDrawType; + unsigned int m_dwTimeLastRender; + CCamera *m_pCamera; // Defines the camera position and settings for this view. + CToolManager *m_pToolManager; // tool manager for this view + int m_nRenderedFrames; + int m_nLastRaytracedBitmapRenderTimeStamp; + +}; + +#endif // MAPVIEW_H |