csgo-2018-source/hammer/mapview.h

114 lines
3.0 KiB
C
Raw Normal View History

2021-07-25 12:11:47 +08:00
//===== Copyright <20> 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