Counter Strike : Global Offensive Source Code
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//========= Copyright � 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
// nav_pathfind.h
// Path-finding mechanisms using the Navigation Mesh
// Author: Michael S. Booth ([email protected]), January 2003
#ifndef _CS_NAV_PATHFIND_H_
#define _CS_NAV_PATHFIND_H_
#include "nav_pathfind.h"
//--------------------------------------------------------------------------------------------------------------
/**
* Compute travel distance along shortest path from startPos to goalPos. * Return -1 if can't reach endPos from goalPos. */ template< typename CostFunctor > float NavAreaTravelDistance( const Vector &startPos, const Vector &goalPos, CostFunctor &costFunc ) { CNavArea *startArea = TheNavMesh->GetNearestNavArea( startPos ); if (startArea == NULL) { return -1.0f; }
// compute path between areas using given cost heuristic
CNavArea *goalArea = NULL; if (NavAreaBuildPath( startArea, NULL, &goalPos, costFunc, &goalArea ) == false) { return -1.0f; }
// compute distance along path
if (goalArea->GetParent() == NULL) { // both points are in the same area - return euclidean distance
return (goalPos - startPos).Length(); } else { CNavArea *area; float distance;
// goalPos is assumed to be inside goalArea (or very close to it) - skip to next area
area = goalArea->GetParent(); distance = (goalPos - area->GetCenter()).Length();
for( ; area->GetParent(); area = area->GetParent() ) { distance += (area->GetCenter() - area->GetParent()->GetCenter()).Length(); }
// add in distance to startPos
distance += (startPos - area->GetCenter()).Length();
return distance; } }
#endif // _CS_NAV_PATHFIND_H_
|