Added filter keyvalue to npc_heli_avoidsphere

This commit is contained in:
Blixibon 2021-11-06 00:07:06 -05:00
parent 435b84f96b
commit 35ca2ab5a6
2 changed files with 29 additions and 0 deletions

View File

@ -267,6 +267,10 @@ private:
typedef CHandle<CAvoidSphere> AvoidSphereHandle_t; typedef CHandle<CAvoidSphere> AvoidSphereHandle_t;
float m_flRadius; float m_flRadius;
#ifdef MAPBASE
string_t m_iszAvoidFilter;
EHANDLE m_hAvoidFilter;
#endif
static CUtlVector< AvoidSphereHandle_t > s_AvoidSpheres; static CUtlVector< AvoidSphereHandle_t > s_AvoidSpheres;
}; };

View File

@ -42,6 +42,10 @@
#include "physics_bone_follower.h" #include "physics_bone_follower.h"
#endif // HL2_EPISODIC #endif // HL2_EPISODIC
#ifdef MAPBASE
#include "filters.h"
#endif
// memdbgon must be the last include file in a .cpp file!!! // memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h" #include "tier0/memdbgon.h"
@ -5680,6 +5684,9 @@ LINK_ENTITY_TO_CLASS( npc_heli_avoidsphere, CAvoidSphere );
BEGIN_DATADESC( CAvoidSphere ) BEGIN_DATADESC( CAvoidSphere )
DEFINE_KEYFIELD( m_flRadius, FIELD_FLOAT, "radius" ), DEFINE_KEYFIELD( m_flRadius, FIELD_FLOAT, "radius" ),
#ifdef MAPBASE
DEFINE_KEYFIELD( m_iszAvoidFilter, FIELD_STRING, "AvoidFilter" ),
#endif
END_DATADESC() END_DATADESC()
@ -5720,6 +5727,18 @@ void CAvoidSphere::Activate( )
{ {
BaseClass::Activate(); BaseClass::Activate();
s_AvoidSpheres.AddToTail( this ); s_AvoidSpheres.AddToTail( this );
#ifdef MAPBASE
m_hAvoidFilter = gEntList.FindEntityByName( NULL, m_iszAvoidFilter, this );
if (m_hAvoidFilter)
{
if (dynamic_cast<CBaseFilter*>(m_hAvoidFilter.Get()) == NULL)
{
Warning( "%s: \"%s\" is not a valid filter", GetDebugName(), m_hAvoidFilter->GetDebugName() );
m_hAvoidFilter = NULL;
}
}
#endif
} }
void CAvoidSphere::UpdateOnRemove( ) void CAvoidSphere::UpdateOnRemove( )
@ -5746,6 +5765,12 @@ void CAvoidSphere::ComputeAvoidanceForces( CBaseEntity *pEntity, float flEntityR
CAvoidSphere *pSphere = s_AvoidSpheres[i].Get(); CAvoidSphere *pSphere = s_AvoidSpheres[i].Get();
const Vector &vecAvoidCenter = pSphere->WorldSpaceCenter(); const Vector &vecAvoidCenter = pSphere->WorldSpaceCenter();
#ifdef MAPBASE
// Continue if not passing the avoid sphere filter
if ( pSphere->m_hAvoidFilter && !(static_cast<CBaseFilter*>( pSphere->m_hAvoidFilter.Get())->PassesFilter(pSphere, pEntity )) )
continue;
#endif
// NOTE: This test can be thought of sweeping a sphere through space // NOTE: This test can be thought of sweeping a sphere through space
// and seeing if it intersects the avoidance sphere // and seeing if it intersects the avoidance sphere
float flTotalRadius = flEntityRadius + pSphere->m_flRadius; float flTotalRadius = flEntityRadius + pSphere->m_flRadius;