initial
This commit is contained in:
218
hammer/mapview2dbase.h
Normal file
218
hammer/mapview2dbase.h
Normal file
@@ -0,0 +1,218 @@
|
||||
//===== Copyright <20> 1996-2005, 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
|
||||
Reference in New Issue
Block a user