|
|
//===== Copyright � 1996-2005, 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
|