summaryrefslogtreecommitdiff
path: root/hammer/mapview3d.h
diff options
context:
space:
mode:
Diffstat (limited to 'hammer/mapview3d.h')
-rw-r--r--hammer/mapview3d.h209
1 files changed, 209 insertions, 0 deletions
diff --git a/hammer/mapview3d.h b/hammer/mapview3d.h
new file mode 100644
index 0000000..0672352
--- /dev/null
+++ b/hammer/mapview3d.h
@@ -0,0 +1,209 @@
+//========= 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