|
|
//========= Copyright � 1996-2005, 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"
#include "mapface.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();
void Foundry_OnLButtonDown( int x, int y );
// 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
void RenderView2( bool bRenderingOverEngine );
private:
void Render( bool bRenderingOverEngine );
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
|