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 /game/client/tf2/playerandobjectenumerator.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/tf2/playerandobjectenumerator.cpp')
| -rw-r--r-- | game/client/tf2/playerandobjectenumerator.cpp | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/game/client/tf2/playerandobjectenumerator.cpp b/game/client/tf2/playerandobjectenumerator.cpp new file mode 100644 index 0000000..a037b6d --- /dev/null +++ b/game/client/tf2/playerandobjectenumerator.cpp @@ -0,0 +1,69 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#include "cbase.h" +#include "playerandobjectenumerator.h" +#include "tf_shareddefs.h" + +// Enumator class for ragdolls being affected by explosive forces +CPlayerAndObjectEnumerator::CPlayerAndObjectEnumerator( float radius ) +{ + m_flRadiusSquared = radius * radius; + m_Objects.RemoveAll(); + m_pLocal = C_BasePlayer::GetLocalPlayer(); +} + +int CPlayerAndObjectEnumerator::GetObjectCount() +{ + return m_Objects.Size(); +} + +C_BaseEntity *CPlayerAndObjectEnumerator::GetObject( int index ) +{ + if ( index < 0 || index >= GetObjectCount() ) + return NULL; + + return m_Objects[ index ]; +} + +// Actual work code +IterationRetval_t CPlayerAndObjectEnumerator::EnumElement( IHandleEntity *pHandleEntity ) +{ + if ( !m_pLocal ) + return ITERATION_STOP; + + C_BaseEntity *pEnt = ClientEntityList().GetBaseEntityFromHandle( pHandleEntity->GetRefEHandle() ); + if ( pEnt == NULL ) + return ITERATION_CONTINUE; + + if ( pEnt == m_pLocal ) + return ITERATION_CONTINUE; + + if ( !pEnt->IsPlayer() && + !pEnt->IsBaseObject() ) + { + return ITERATION_CONTINUE; + } + + // Ignore vehicles, since they have vcollide collisions that's push me away + if ( pEnt->GetCollisionGroup() == COLLISION_GROUP_VEHICLE ) + return ITERATION_CONTINUE; + + // If it's solid to player movement, don't steer around it since we'll just bump into it + if ( pEnt->GetCollisionGroup() == TFCOLLISION_GROUP_OBJECT_SOLIDTOPLAYERMOVEMENT ) + return ITERATION_CONTINUE; + + Vector deltaPos = pEnt->GetAbsOrigin() - m_pLocal->GetAbsOrigin(); + if ( deltaPos.LengthSqr() > m_flRadiusSquared ) + return ITERATION_CONTINUE; + + CHandle< C_BaseEntity > h; + h = pEnt; + m_Objects.AddToTail( h ); + + return ITERATION_CONTINUE; +}
\ No newline at end of file |