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/server/tf/passtime_ballcontroller.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/server/tf/passtime_ballcontroller.cpp')
| -rw-r--r-- | game/server/tf/passtime_ballcontroller.cpp | 170 |
1 files changed, 170 insertions, 0 deletions
diff --git a/game/server/tf/passtime_ballcontroller.cpp b/game/server/tf/passtime_ballcontroller.cpp new file mode 100644 index 0000000..6354632 --- /dev/null +++ b/game/server/tf/passtime_ballcontroller.cpp @@ -0,0 +1,170 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#include "cbase.h" +#include "tf_passtime_ball.h" +#include "passtime_ballcontroller.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +//----------------------------------------------------------------------------- +namespace +{ + int SortDescendingPriority( CPasstimeBallController *const *ppA, CPasstimeBallController *const *ppB ) + { + return static_cast< CPasstimeBallController* >( *ppB )->GetPriority() + - static_cast< CPasstimeBallController* >( *ppA )->GetPriority(); + } +} + +//----------------------------------------------------------------------------- +// static +int CPasstimeBallController::ApplyTo( CPasstimeBall *pBall ) +{ + // Sort controllers by iPriority, then call Apply until one returns true. + // From then on, skip controllers with a lower iPriority. + // This sorts the autolist, but that should be OK. + auto &controllers = GetAutoList(); + controllers.Sort( &SortDescendingPriority ); + int iMinPriority = INT_MIN; + int iNumControllers = 0; + + for ( auto controller : controllers ) + { + if ( !controller->IsEnabled() || !controller->IsActive() ) + { + continue; + } + + if ( controller->GetPriority() < iMinPriority ) + { + break; + } + + if ( controller->Apply( pBall ) ) + { + iMinPriority = controller->GetPriority(); + ++iNumControllers; + } + } + return iNumControllers; +} + +//----------------------------------------------------------------------------- +// static +int CPasstimeBallController::DisableOn( const CPasstimeBall *pBall ) +{ + auto &controllers = GetAutoList(); + int iCount = 0; + for ( auto pController : controllers ) + { + if ( pController->IsEnabled() ) + { + pController->SetIsEnabled( false ); + ++iCount; + } + } + return iCount; +} + +//----------------------------------------------------------------------------- +// static +void CPasstimeBallController::BallCollision( CPasstimeBall *pBall, + int iCollisionIndex, gamevcollisionevent_t *pEvent ) +{ + auto &controllers = GetAutoList(); + for ( auto pController : controllers ) + { + if ( pController->IsEnabled() && pController->IsActive() ) + { + pController->OnBallCollision( pBall, iCollisionIndex, pEvent ); + } + } +} + +//----------------------------------------------------------------------------- +// static +void CPasstimeBallController::BallPickedUp( CPasstimeBall *pBall, + CTFPlayer *pCatcher ) +{ + auto &controllers = GetAutoList(); + for ( auto pController : controllers ) + { + if ( pController->IsEnabled() && pController->IsActive() ) + { + pController->OnBallPickedUp( pBall, pCatcher ); + } + } +} + +//----------------------------------------------------------------------------- +// static +void CPasstimeBallController::BallDamaged( CPasstimeBall *pBall ) +{ + auto &controllers = GetAutoList(); + for ( auto pController : controllers ) + { + if ( pController->IsEnabled() && pController->IsActive() ) + { + pController->OnBallDamaged( pBall ); + } + } +} + +//----------------------------------------------------------------------------- +// static +void CPasstimeBallController::BallSpawned( CPasstimeBall *pBall ) +{ + auto &controllers = GetAutoList(); + for ( auto pController : controllers ) + { + if ( pController->IsEnabled() && pController->IsActive() ) + { + pController->OnBallSpawned( pBall ); + } + } +} + +//----------------------------------------------------------------------------- +CPasstimeBallController::CPasstimeBallController( int iPriority ) + : m_bEnabled( false ) + , m_iPriority( iPriority ) {} + + +//----------------------------------------------------------------------------- +void CPasstimeBallController::SetIsEnabled( bool bEnabled ) +{ + if ( m_bEnabled == bEnabled ) + { + return; + } + + m_bEnabled = bEnabled; + + if ( bEnabled ) + { + OnEnabled(); + } + else + { + OnDisabled(); + } +} + +//----------------------------------------------------------------------------- +bool CPasstimeBallController::IsEnabled() const +{ + return m_bEnabled; +} + +//----------------------------------------------------------------------------- +int CPasstimeBallController::GetPriority() const +{ + return m_iPriority; +} + |