diff options
| author | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
|---|---|---|
| committer | FluorescentCIAAfricanAmerican <[email protected]> | 2020-04-22 12:56:21 -0400 |
| commit | 3bf9df6b2785fa6d951086978a3e66f49427166a (patch) | |
| tree | 2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /hammer/toolswepthull.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'hammer/toolswepthull.cpp')
| -rw-r--r-- | hammer/toolswepthull.cpp | 149 |
1 files changed, 149 insertions, 0 deletions
diff --git a/hammer/toolswepthull.cpp b/hammer/toolswepthull.cpp new file mode 100644 index 0000000..a12c41c --- /dev/null +++ b/hammer/toolswepthull.cpp @@ -0,0 +1,149 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#include "stdafx.h" +#include "History.h" +#include "MainFrm.h" // For ObjectProperties +#include "MapDoc.h" +#include "MapSweptPlayerHull.h" +#include "MapPointHandle.h" +#include "MapView2D.h" +#include "Render2D.h" +#include "StatusBarIDs.h" // For SetStatusText +#include "ToolManager.h" +#include "ToolSweptHull.h" +#include "ToolPointHandle.h" +#include "Selection.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include <tier0/memdbgon.h> + + +//----------------------------------------------------------------------------- +// Purpose: Constructor. +//----------------------------------------------------------------------------- +CToolSweptPlayerHull::CToolSweptPlayerHull(void) +{ + m_pSweptHull = NULL; + m_nPointIndex = 0; +} + + +//----------------------------------------------------------------------------- +// Purpose: Attaches the point to the tool for manipulation. +//----------------------------------------------------------------------------- +void CToolSweptPlayerHull::Attach(CMapSweptPlayerHull *pSweptHull, int nPointIndex) +{ + if ((pSweptHull != NULL) && (nPointIndex < 2)) + { + m_pSweptHull = pSweptHull; + m_nPointIndex = nPointIndex; + } +} + + +//----------------------------------------------------------------------------- +// Purpose: Handles left button down events in the 2D view. +// Input : Per CWnd::OnLButtonDown. +// Output : Returns true if the message was handled, false if not. +//----------------------------------------------------------------------------- +bool CToolSweptPlayerHull::OnLMouseDown2D(CMapView2D *pView, UINT nFlags, const Vector2D &vPoint) +{ + // + // Activate this tool and start dragging the swept hull endpoint. + // + ToolManager()->PushTool(TOOL_SWEPT_HULL); + pView->SetCapture(); + + CMapDoc *pDoc = pView->GetMapDoc(); + GetHistory()->MarkUndoPosition(pDoc->GetSelection()->GetList(), "Modify Swept Hull"); + GetHistory()->Keep(m_pSweptHull); + + return true; +} + + +//----------------------------------------------------------------------------- +// Purpose: Handles left button up events in the 2D view. +// Input : Per CWnd::OnLButtonUp. +// Output : Returns true if the message was handled, false if not. +//----------------------------------------------------------------------------- +bool CToolSweptPlayerHull::OnLMouseUp2D(CMapView2D *pView, UINT nFlags, const Vector2D &vPoint) +{ + // dvsFIXME: do we need to update the point here? + + ToolManager()->PopTool(); + ReleaseCapture(); + + CMapDoc *pDoc = pView->GetMapDoc(); + pDoc->UpdateAllViews( MAPVIEW_UPDATE_TOOL ); + + return true; +} + + +//----------------------------------------------------------------------------- +// Purpose: Handles mouse move events in the 2D view. +// Input : Per CWnd::OnMouseMove. +// Output : Returns true if the message was handled, false if not. +//----------------------------------------------------------------------------- +bool CToolSweptPlayerHull::OnMouseMove2D(CMapView2D *pView, UINT nFlags, const Vector2D &vPoint) +{ + // + // Make sure the point is visible. + // + pView->ToolScrollToPoint(vPoint); + + // + // Snap the point to half the grid size. Do this so that we can always center + // the hull even on odd-width objects. + // + Vector vecWorld; + pView->ClientToWorld(vecWorld, vPoint); + + CMapDoc *pDoc = pView->GetMapDoc(); + pDoc->Snap(vecWorld, 0); + + // + // Move to the snapped position. + // + Vector vecPos[2]; + m_pSweptHull->GetEndPoint(vecPos[m_nPointIndex], m_nPointIndex); + + vecPos[m_nPointIndex][pView->axHorz] = vecWorld[pView->axHorz]; + vecPos[m_nPointIndex][pView->axVert] = vecWorld[pView->axVert]; + + m_pSweptHull->UpdateEndPoint(vecPos[m_nPointIndex], m_nPointIndex); + + int nOtherIndex = (m_nPointIndex == 0); + m_pSweptHull->GetEndPoint(vecPos[nOtherIndex], nOtherIndex); + + // + // Update the status bar and the views. + // + char szBuf[128]; + sprintf(szBuf, " (%.0f %.0f %0.f) ", vecPos[m_nPointIndex][0], vecPos[m_nPointIndex][1], vecPos[m_nPointIndex][2]); + SetStatusText(SBI_COORDS, szBuf); + + pDoc->UpdateAllViews( MAPVIEW_UPDATE_TOOL ); + + return true; +} + + +//----------------------------------------------------------------------------- +// Purpose: Renders the tool in the 2D view. +// Input : pRender - The interface to use for rendering. +//----------------------------------------------------------------------------- +void CToolSweptPlayerHull::RenderTool2D(CRender2D *pRender) +{ + SelectionState_t eState = m_pSweptHull->SetSelectionState(SELECT_MODIFY, m_nPointIndex); + m_pSweptHull->Render2D(pRender); + m_pSweptHull->SetSelectionState(eState); +} + + |