initial
This commit is contained in:
132
hammer/gridnav.h
Normal file
132
hammer/gridnav.h
Normal file
@@ -0,0 +1,132 @@
|
||||
//========= Copyright <20> 2009, Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose: Defines the regular grid nav as required by DOTA. Builds, renders,
|
||||
// and saves out the nav. Traversable edges and cells are determined by
|
||||
// picking into the world.
|
||||
//
|
||||
//=============================================================================//
|
||||
|
||||
#ifndef GRIDNAV_H
|
||||
#define GRIDNAV_H
|
||||
#ifdef _WIN32
|
||||
#pragma once
|
||||
#endif
|
||||
|
||||
class CRender3D;
|
||||
class CMapDoc;
|
||||
|
||||
#include "mathlib/vector.h"
|
||||
#include "utlvector.h"
|
||||
|
||||
class CGridNavCell
|
||||
{
|
||||
public:
|
||||
|
||||
inline CGridNavCell();
|
||||
|
||||
bool m_bTraversable;
|
||||
|
||||
int m_nGridPosX;
|
||||
int m_nGridPosY;
|
||||
|
||||
float m_flHeight;
|
||||
};
|
||||
|
||||
class CGridNav
|
||||
{
|
||||
public:
|
||||
|
||||
CGridNav();
|
||||
|
||||
inline static bool IsEnabled();
|
||||
|
||||
inline bool IsPreviewActive();
|
||||
inline void TogglePreview();
|
||||
|
||||
static void Init( bool enabled, float flEdgeSize = 0.0f, float flOffsetX = 0.0f, float flOffsetY = 0.0f, float flTraceHeight = 0.0f );
|
||||
|
||||
void Render( CRender3D *pRender, const Vector &vViewPos, const Vector &vViewDir );
|
||||
|
||||
void Update( CMapDoc *pMapDoc, const Vector &vViewPos, const Vector &vViewDir );
|
||||
|
||||
void GenerateGridNavFile( const char *pFileFullPath );
|
||||
|
||||
inline int CoordToGridPosX( float flCoordX ) const;
|
||||
inline int CoordToGridPosY( float flCoordY ) const;
|
||||
|
||||
inline float GridPosXToCoordCenter( int nGridPosX ) const;
|
||||
inline float GridPosYToCoordCenter( int nGridPosY ) const;
|
||||
|
||||
private:
|
||||
|
||||
static bool sm_bEnabled;
|
||||
static float sm_flEdgeSize;
|
||||
static float sm_flOffsetX;
|
||||
static float sm_flOffsetY;
|
||||
static float sm_flTraceHeight;
|
||||
|
||||
Vector m_vLatestCameraPos;
|
||||
Vector m_vLatestCameraDir;
|
||||
bool m_bNeedsCameraRecompute;
|
||||
float m_flTimeCameraLastMoved;
|
||||
int m_nTicksCameraStill;
|
||||
|
||||
CUtlVector< CGridNavCell > m_CurrentCells;
|
||||
|
||||
bool m_bPreviewActive;
|
||||
};
|
||||
|
||||
|
||||
////////////////////
|
||||
|
||||
bool CGridNav::IsEnabled()
|
||||
{
|
||||
return sm_bEnabled;
|
||||
}
|
||||
|
||||
|
||||
bool CGridNav::IsPreviewActive()
|
||||
{
|
||||
return m_bPreviewActive;
|
||||
}
|
||||
|
||||
|
||||
void CGridNav::TogglePreview()
|
||||
{
|
||||
m_bPreviewActive = !m_bPreviewActive;
|
||||
}
|
||||
|
||||
|
||||
int CGridNav::CoordToGridPosX( float flCoordX ) const
|
||||
{
|
||||
return (int)floor( ( ( flCoordX - sm_flOffsetX ) + ( sm_flEdgeSize * 0.5f ) ) / sm_flEdgeSize );
|
||||
}
|
||||
|
||||
|
||||
int CGridNav::CoordToGridPosY( float flCoordY ) const
|
||||
{
|
||||
return (int)floor( ( ( flCoordY - sm_flOffsetY ) + ( sm_flEdgeSize * 0.5f ) ) / sm_flEdgeSize );
|
||||
}
|
||||
|
||||
|
||||
float CGridNav::GridPosXToCoordCenter( int nGridPosX ) const
|
||||
{
|
||||
return ( ( (float)(nGridPosX) ) * sm_flEdgeSize ) + sm_flOffsetX;
|
||||
}
|
||||
|
||||
|
||||
float CGridNav::GridPosYToCoordCenter( int nGridPosY ) const
|
||||
{
|
||||
return ( ( (float)(nGridPosY) ) * sm_flEdgeSize ) + sm_flOffsetY;
|
||||
}
|
||||
|
||||
|
||||
CGridNavCell::CGridNavCell()
|
||||
: m_bTraversable( false )
|
||||
, m_nGridPosX( 0 )
|
||||
, m_nGridPosY( 0 )
|
||||
, m_flHeight( 0.0f )
|
||||
{
|
||||
}
|
||||
|
||||
#endif // GRIDNAV_H
|
||||
Reference in New Issue
Block a user