Team Fortress 2 Source Code as on 22/4/2020
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 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; }
|