//========= 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