You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
209 lines
6.0 KiB
209 lines
6.0 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef MAPVIEW3D_H |
|
#define MAPVIEW3D_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "Keyboard.h" |
|
#include "MapView.h" |
|
#include "Render3D.h" |
|
#include "camera.h" |
|
|
|
namespace vgui |
|
{ |
|
typedef unsigned long HCursor; |
|
} |
|
|
|
|
|
class CMapAtom; |
|
class CRender3D; |
|
class CCamera; |
|
class CTitleWnd; |
|
class CMapDecal; |
|
|
|
struct PLANE; |
|
|
|
|
|
class CMapView3D : public CView, public CMapView |
|
{ |
|
protected: |
|
|
|
CMapView3D(); |
|
DECLARE_DYNCREATE(CMapView3D) |
|
|
|
public: |
|
|
|
virtual LRESULT WindowProc( UINT message, WPARAM wParam, LPARAM lParam ); |
|
enum |
|
{ |
|
updNothing = 0x00, |
|
updMorphOnly = 0x01, |
|
updAll = 0x02, |
|
updRedrawNow = 0x04 |
|
}; |
|
|
|
void SetCamera(const Vector &vecPos, const Vector &vecLookAt); |
|
|
|
// |
|
// CMapView interface: |
|
// |
|
void RenderView(); |
|
bool ShouldRender(); |
|
void ActivateView(bool bActivate); |
|
void UpdateView(int nFlags); |
|
CView *GetViewWnd() { return (CView*)this; } |
|
CMapDoc *GetMapDoc() { return (CMapDoc*)m_pDocument;} |
|
void WorldToClient(Vector2D &ptClient, const Vector &vecWorld); |
|
void ClientToWorld(Vector &vecWorld, const Vector2D &ptClient); |
|
bool HitTest( const Vector2D &vPoint, const Vector& mins, const Vector& maxs ); |
|
void GetBestTransformPlane( Vector &horzAxis, Vector &vertAxis, Vector &thirdAxis); |
|
|
|
void GetHitPos(const Vector2D &point, PLANE &plane, Vector &pos); |
|
void ProcessInput(void); |
|
|
|
void UpdateStatusBar(); |
|
|
|
// Called by the camera tool to control the camera. |
|
void EnableMouseLook(bool bEnable); |
|
void EnableRotating(bool bEnable); |
|
void EnableStrafing(bool bEnable); |
|
void UpdateCameraVariables(void); |
|
|
|
void MoveForward(float flDistance); |
|
void MoveUp(float flDistance); |
|
void MoveRight(float flDistance); |
|
void Pitch(float flDegrees); |
|
void Yaw(float flDegrees); |
|
|
|
void BeginPick(void); |
|
void EndPick(void); |
|
|
|
DrawType_t GetDrawType() { return m_eDrawType; } |
|
void SetDrawType(DrawType_t eDrawType); |
|
|
|
int ObjectsAt( const Vector2D &point, HitInfo_t *pObjects, int nMaxObjects, unsigned int nFlags = 0 ); |
|
|
|
CMapClass *NearestObjectAt( const Vector2D &point, ULONG &ulFace, unsigned int nFlags = 0, VMatrix *pLocalMatrix = NULL ); |
|
|
|
void RenderPreloadObject(CMapAtom *pObject); |
|
|
|
void SetCursor( vgui::HCursor hCursor ); |
|
|
|
// Release all video memory |
|
void ReleaseVideoMemory(); |
|
|
|
// ClassWizard generated virtual function overrides |
|
//{{AFX_VIRTUAL(CMapView3D) |
|
public: |
|
virtual BOOL PreCreateWindow(CREATESTRUCT& cs); |
|
virtual BOOL DestroyWindow(); |
|
virtual void OnInitialUpdate(); |
|
protected: |
|
virtual BOOL OnPreparePrinting(CPrintInfo* pInfo); |
|
//}}AFX_VIRTUAL |
|
|
|
public: |
|
virtual ~CMapView3D(); |
|
#ifdef _DEBUG |
|
virtual void AssertValid() const; |
|
virtual void Dump(CDumpContext& dc) const; |
|
#endif |
|
|
|
private: |
|
|
|
void Render(); |
|
|
|
void EnableCrosshair(bool bEnable); |
|
|
|
|
|
bool ControlCamera(const CPoint &point); |
|
|
|
// |
|
// Keyboard processing. |
|
// |
|
void InitializeKeyMap(void); |
|
void ProcessMouse(void); |
|
void ProcessKeys(float fElapsedTime); |
|
void ProcessMovementKeys(float fElapsedTime); |
|
float GetKeyScale(unsigned int uKeyState); |
|
|
|
// Radius culling |
|
void ProcessCulling( void ); |
|
|
|
enum |
|
{ |
|
MVTIMER_PICKNEXT = 0 |
|
}; |
|
|
|
bool m_bMouseLook; // Set to true when we override the mouse processing to use mouselook. |
|
bool m_bStrafing; |
|
bool m_bRotating; |
|
CPoint m_ptLastMouseMovement; // Last position used for tracking the mouse for camera control. |
|
|
|
DWORD m_dwTimeLastSample; // Used for calculating rendering framerate. |
|
DWORD m_dwTimeLastInputSample; // Used for framerate-independent input processing. |
|
|
|
float m_fForwardSpeed; // Current forward speed, in world units per second. |
|
float m_fStrafeSpeed; // Current side-to-side speed, in world units per second. |
|
float m_fVerticalSpeed; // Current up-down speed, in world units per second. |
|
|
|
float m_fForwardSpeedMax; // Maximum forward speed, in world units per second. |
|
float m_fStrafeSpeedMax; // Maximum side-to-side speed, in world units per second. |
|
float m_fVerticalSpeedMax; // Maximum up-down speed, in world units per second. |
|
|
|
float m_fForwardAcceleration; // Forward acceleration, in world units per second squared. |
|
float m_fStrafeAcceleration; // Side-to-side acceleration, in world units per second squared. |
|
float m_fVerticalAcceleration; // Up-down acceleration, in world units per second squared. |
|
|
|
DrawType_t m_eDrawType; // How we render - wireframe, flat, textured, lightmap grid, or lighting preview. |
|
bool m_bLightingPreview; |
|
|
|
CTitleWnd *m_pwndTitle; // Title window. |
|
|
|
CRender3D *m_pRender; // Performs the 3D rendering in our window. |
|
CKeyboard m_Keyboard; // Handles binding of keys and mouse buttons to logical functions. |
|
|
|
bool m_bCameraPosChanged; |
|
bool m_bClippingChanged; |
|
|
|
//{{AFX_MSG(CMapView3D) |
|
protected: |
|
afx_msg void OnTimer(UINT nIDEvent); |
|
afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); |
|
afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); |
|
afx_msg void OnSize(UINT nType, int cx, int cy); |
|
afx_msg void OnLButtonDown(UINT nFlags, CPoint point); |
|
afx_msg void OnLButtonUp(UINT nFlags, CPoint point); |
|
afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point); |
|
afx_msg void OnRButtonDown( UINT nFlags, CPoint point ); |
|
afx_msg BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint point); |
|
afx_msg void OnRButtonUp(UINT nFlags, CPoint point); |
|
afx_msg void OnContextMenu(CWnd *pWnd, CPoint point); |
|
afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags); |
|
afx_msg void OnSetFocus(CWnd* pOldWnd); |
|
afx_msg void OnDraw(CDC *pDC); |
|
afx_msg BOOL OnFaceAlign(UINT uCmd); |
|
afx_msg BOOL OnFaceJustify(UINT uCmd); |
|
afx_msg void OnView3dWireframe(void); |
|
afx_msg void OnView3dPolygon(void); |
|
afx_msg void OnView3dTextured(void); |
|
afx_msg void OnView3dLightmapGrid(void); |
|
afx_msg void OnView3dLightingPreview(void); |
|
afx_msg void OnView3dLightingPreviewRayTraced(void); |
|
//afx_msg void OnView3dEngine(void); |
|
afx_msg void OnMouseMove(UINT nFlags, CPoint point); |
|
afx_msg void OnKillFocus(CWnd *pNewWnd); |
|
afx_msg void OnNcPaint( ); |
|
//}}AFX_MSG |
|
|
|
DECLARE_MESSAGE_MAP() |
|
}; |
|
|
|
#endif // MAPVIEW3D_H
|
|
|