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.
73 lines
2.2 KiB
73 lines
2.2 KiB
//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============//
|
|
//
|
|
// Purpose:
|
|
//
|
|
// $NoKeywords: $
|
|
//
|
|
//=============================================================================//
|
|
// nav.h
|
|
// Data structures and constants for the Navigation Mesh system
|
|
// Author: Michael S. Booth ([email protected]), January 2003
|
|
|
|
#ifndef _CS_NAV_H_
|
|
#define _CS_NAV_H_
|
|
|
|
#include "nav.h"
|
|
|
|
/**
|
|
* Below are several constants used by the navigation system.
|
|
* @todo Move these into TheNavMesh singleton.
|
|
*/
|
|
const float BotRadius = 10.0f; ///< circular extent that contains bot
|
|
|
|
class CNavArea;
|
|
class CSNavNode;
|
|
|
|
#if 0
|
|
//--------------------------------------------------------------------------------------------------------------
|
|
/**
|
|
* Return true if given entity can be ignored when moving
|
|
*/
|
|
#define WALK_THRU_DOORS 0x01
|
|
#define WALK_THRU_BREAKABLES 0x02
|
|
#define WALK_THRU_TOGGLE_BRUSHES 0x04
|
|
#define WALK_THRU_EVERYTHING (WALK_THRU_DOORS | WALK_THRU_BREAKABLES | WALK_THRU_TOGGLE_BRUSHES)
|
|
inline bool IsEntityWalkable( CBaseEntity *entity, unsigned int flags )
|
|
{
|
|
if (FClassnameIs( entity, "worldspawn" ))
|
|
return false;
|
|
|
|
if (FClassnameIs( entity, "player" ))
|
|
return false;
|
|
|
|
// if we hit a door, assume its walkable because it will open when we touch it
|
|
if (FClassnameIs( entity, "prop_door*" ) || FClassnameIs( entity, "func_door*" ))
|
|
return (flags & WALK_THRU_DOORS) ? true : false;
|
|
|
|
// if we hit a clip brush, ignore it if it is not BRUSHSOLID_ALWAYS
|
|
if (FClassnameIs( entity, "func_brush" ))
|
|
{
|
|
CFuncBrush *brush = (CFuncBrush *)entity;
|
|
switch ( brush->m_iSolidity )
|
|
{
|
|
case CFuncBrush::BRUSHSOLID_ALWAYS:
|
|
return false;
|
|
case CFuncBrush::BRUSHSOLID_NEVER:
|
|
return true;
|
|
case CFuncBrush::BRUSHSOLID_TOGGLE:
|
|
return (flags & WALK_THRU_TOGGLE_BRUSHES) ? true : false;
|
|
}
|
|
}
|
|
|
|
// if we hit a breakable object, assume its walkable because we will shoot it when we touch it
|
|
if (FClassnameIs( entity, "func_breakable" ) && entity->GetHealth() && entity->m_takedamage == DAMAGE_YES)
|
|
return (flags & WALK_THRU_BREAKABLES) ? true : false;
|
|
|
|
if (FClassnameIs( entity, "func_breakable_surf" ) && entity->m_takedamage == DAMAGE_YES)
|
|
return (flags & WALK_THRU_BREAKABLES) ? true : false;
|
|
|
|
return false;
|
|
}
|
|
#endif
|
|
|
|
#endif // _CS_NAV_H_
|