//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: CTF ChangeClass Zone. // //=============================================================================// #include "cbase.h" #include "viewport_panel_names.h" #include "tf_player.h" #include "tf_item.h" #include "tf_team.h" #include "func_changeclass.h" LINK_ENTITY_TO_CLASS( func_changeclass, CChangeClassZone ); #define TF_CHANGECLASS_SOUND "ChangeClass.Touch" #define TF_CHANGECLASS_NEXT_USE_TIME 10.0f //============================================================================= // // CTF ChangeClass Zone functions. // //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- CChangeClassZone::CChangeClassZone() { m_bDisabled = false; } //----------------------------------------------------------------------------- // Purpose: Spawn function for the entity //----------------------------------------------------------------------------- void CChangeClassZone::Spawn( void ) { Precache(); InitTrigger(); SetTouch( &CChangeClassZone::Touch ); } //----------------------------------------------------------------------------- // Purpose: Precache function for the entity //----------------------------------------------------------------------------- void CChangeClassZone::Precache( void ) { PrecacheScriptSound( TF_CHANGECLASS_SOUND ); } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CChangeClassZone::Touch( CBaseEntity *pOther ) { if ( !IsDisabled() ) { CTFPlayer *pPlayer = ToTFPlayer( pOther ); if ( pPlayer ) { if ( pPlayer->GetNextChangeClassTime() > gpGlobals->curtime ) return; int iTeam = GetTeamNumber(); if ( iTeam && ( pPlayer->GetTeamNumber() != iTeam ) ) return; // bring up the player's changeclass menu CCommand args; args.Tokenize( "changeclass" ); pPlayer->ClientCommand( args ); pPlayer->SetNextChangeClassTime( gpGlobals->curtime + TF_CHANGECLASS_NEXT_USE_TIME ); CPASAttenuationFilter filter( pOther, TF_CHANGECLASS_SOUND ); EmitSound( filter, pOther->entindex(), TF_CHANGECLASS_SOUND ); } } } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CChangeClassZone::EndTouch( CBaseEntity *pOther ) { } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CChangeClassZone::InputEnable( inputdata_t &inputdata ) { SetDisabled( false ); } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CChangeClassZone::InputDisable( inputdata_t &inputdata ) { SetDisabled( true ); } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- bool CChangeClassZone::IsDisabled( void ) { return m_bDisabled; } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CChangeClassZone::InputToggle( inputdata_t &inputdata ) { if ( m_bDisabled ) { SetDisabled( false ); } else { SetDisabled( true ); } } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void CChangeClassZone::SetDisabled( bool bDisabled ) { m_bDisabled = bDisabled; }