summaryrefslogtreecommitdiff
path: root/hammer/mapview2dbase.h
diff options
context:
space:
mode:
Diffstat (limited to 'hammer/mapview2dbase.h')
-rw-r--r--hammer/mapview2dbase.h218
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