diff options
Diffstat (limited to 'hammer/mapview2dbase.h')
| -rw-r--r-- | hammer/mapview2dbase.h | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/hammer/mapview2dbase.h b/hammer/mapview2dbase.h new file mode 100644 index 0000000..8ae645a --- /dev/null +++ b/hammer/mapview2dbase.h @@ -0,0 +1,218 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//===========================================================================// + +#ifndef MAPVIEW2DBASE_H +#define MAPVIEW2DBASE_H +#ifdef _WIN32 +#pragma once +#endif + + +#include "Axes2.h" +#include "MapView.h" +#include "MapClass.h" // For CMapObjectList +#include "utlvector.h" +#include "VGuiWnd.h" +#include "color.h" + +class CTitleWnd; +class CMapDoc; +class Tool3D; + +class CMapView2DBase : public CView, public CMapView, public Axes2, public CVGuiWnd +{ +// Operations +public: + LRESULT WindowProc( UINT message, WPARAM wParam, LPARAM lParam ); + + void SetViewOrigin( float flHorz, float flVert, bool bRelative = false ); + + void SetZoom(float flNewZoom); + float GetZoom( void ); + + void CenterView(Vector *pt3 = NULL); + void UpdateClientView(); + void ToolScrollToPoint(const Vector2D &ptClient); + void UpdateStatusBar(); + int ObjectsAt( const Vector2D &vPoint, HitInfo_t *pObjects, int nMaxObjects, unsigned int nFlags = 0 ); + int ObjectsAt( CMapWorld *pWorld, const Vector2D &vPoint, HitInfo_t *pObjects, int nMaxObjects, unsigned int nFlags = 0 ); + void GetCenterPoint(Vector& pt); + void OnContextMenu(UINT nFlags, const Vector2D &vPoint); + + void EnsureVisible(Vector &vecPos, float flMargin); + void UpdateTitleWindowPos(); + + virtual void Render() {} + + void ZoomIn(BOOL bAllViews = FALSE); + void ZoomOut(BOOL bAllViews = FALSE); + + // + // Coordinate transformation functions. + // + void ProcessInput() {} + void RenderView(); + void ActivateView(bool bActivate); + void UpdateView(int nFlags); + CView *GetViewWnd() { return (CView*)this; } + CMapDoc *GetMapDoc() { return (CMapDoc*)m_pDocument; } + + void WorldToClient(Vector2D &vecClient, const Vector &vecWorld); + void ClientToWorld(Vector &vecWorld, const Vector2D &ptClient); + void BuildRay( const Vector2D &ptClient, Vector& vStart, Vector& vEnd ); + void GetBestTransformPlane( Vector &horzAxis, Vector &vertAxis, Vector &thirdAxis); + + const Vector &GetViewAxis(); + bool IsInClientView( const Vector &vecMin, const Vector &vecMax ); + bool IsInClientView( const Vector2D &vecMin, const Vector2D &vecMax ); + + bool CheckDistance(const Vector2D &vecCheck, const Vector2D &vecRef, int nDist); + bool IsBoxFullyVisible(const Vector &vecMins, const Vector &vecMaxs); + bool CanBoxFitInView(const Vector &minsWorld, const Vector &maxsWorld); + bool PointInClientRect( const Vector2D &point ); + bool HitTest( const Vector2D &vPoint, const Vector& mins, const Vector& maxs ); + +// Implementation +protected: + CMapView2DBase(); // protected constructor used by dynamic creation + virtual ~CMapView2DBase(); + DECLARE_DYNCREATE(CMapView2DBase) + + // Derived classes must implement these + virtual bool IsLogical() { return false; } + virtual void OnRenderListDirty() {} + +// Overrides + // ClassWizard generated virtual function overrides + //{{AFX_VIRTUAL(CMapView2DBase) + protected: + virtual void OnInitialUpdate(); // first time after construct + virtual BOOL PreCreateWindow(CREATESTRUCT& cs); + virtual BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint point); + virtual void OnDraw(CDC *) {}; + //}}AFX_VIRTUAL + +#ifdef _DEBUG + virtual void AssertValid() const; + virtual void Dump(CDumpContext& dc) const; +#endif + + void DrawGridLogical( CRender2D *pRender ); + void DrawGrid( CRender2D *pRender, int xAxis, int yAxis, float depth, bool bNoSmallGrid = false ); + CRender2D *GetRender(); + CTitleWnd *GetTitleWnd(); + bool HasTitleWnd() const; + + // Create a title window. + void CreateTitleWindow(void); + +protected: + // timer IDs: + enum + { + TIMER_SCROLLVIEW = 1, + }; + + void DrawPointFile( CRender2D *pRender ); + bool HighlightGridLine( CRender2D *pRender, int nGridLine ); + + POINT m_ptLDownClient; // client pos at which lbutton was pressed, for dragging the view + + // TODO zoom & forward are all camera properties, remove here + + CRender2D *m_pRender; // Performs the 3D rendering in our window. + + float m_flMinZoom; // Minimum legal zoom factor (should be sufficient to display entire map in the view) + + // these vars are used often, so keep values. they just mirror Camera values + Vector m_vViewOrigin; + float m_fZoom; // zoom factor (* map units) + float m_fClientWidthHalf; + float m_fClientHeightHalf; + Vector m_vViewAxis; // view axis, normal + + Vector m_ViewMin; // client view in world coordinates, same as 3D view frustum + Vector m_ViewMax; + + int m_ClientWidth; + int m_ClientHeight; + + int m_xScroll, m_yScroll; // amount to scroll on timer + + bool m_bToolShown; // is tool currently visible? + CTitleWnd *m_pwndTitle; // title window + + Color m_clrGrid; // standard grid color + Color m_clrGrid1024; // 1024 unit line color + Color m_clrGridCustom; // custom unit color + Color m_clrGridDot; // grid dot color + Color m_clrAxis; // grid axis color + + // + // Color scheme functions. + // + void AdjustColorIntensity(Color &color, int nIntensity); + void SetColorMode(bool bBlackOnWhite); + + + // mouse drag (space + leftbutton): + bool m_bMouseDrag; // status indicator + + // Generated message map functions + //{{AFX_MSG(CMapView2DBase) + afx_msg void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags); + afx_msg void OnLButtonDown(UINT nFlags, CPoint point); + afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point); + afx_msg void OnMouseMove(UINT nFlags, CPoint point); + afx_msg void OnLButtonUp(UINT nFlags, CPoint point); + afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); + afx_msg void OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar); + afx_msg void OnRButtonDown(UINT nFlags, CPoint point); + afx_msg void OnTimer(UINT nIDEvent); + afx_msg void OnSize(UINT nType, int cx, int cy); + afx_msg void OnEditProperties(); + afx_msg void OnKeyUp(UINT nChar, UINT nRepCnt, UINT nFlags); + afx_msg void OnChar(UINT nChar, UINT nRepCnt, UINT nFlags); + afx_msg void OnRButtonUp(UINT nFlags, CPoint point); + afx_msg void OnUpdateEditFunction(CCmdUI *pCmdUI); + afx_msg BOOL OnEraseBkgnd(CDC* pDC); + //}}AFX_MSG + + DECLARE_MESSAGE_MAP() +}; + + +//----------------------------------------------------------------------------- +// Inline methods +//----------------------------------------------------------------------------- +inline bool CMapView2DBase::PointInClientRect( const Vector2D &point ) +{ + return ( point.x >= 0 && point.y >= 0 && point.x < m_ClientWidth && point.y < m_ClientHeight ); +} + +inline float CMapView2DBase::GetZoom() +{ + return m_fZoom; +} + +inline CRender2D *CMapView2DBase::GetRender() +{ + return m_pRender; +} + +inline CTitleWnd* CMapView2DBase::GetTitleWnd() +{ + return m_pwndTitle; +} + +inline bool CMapView2DBase::HasTitleWnd() const +{ + return m_pwndTitle != NULL; +} + + +#endif // MAPVIEW2DBASE_H |