//========= Copyright Valve Corporation, All rights reserved. ============// // // Purpose: Entity that propagates objective data // // $NoKeywords: $ //=============================================================================// #include "cbase.h" #include "clientmode_tf.h" #include "c_tf_objective_resource.h" // memdbgon must be the last include file in a .cpp file!!! #include "tier0/memdbgon.h" IMPLEMENT_CLIENTCLASS_DT( C_TFObjectiveResource, DT_TFObjectiveResource, CTFObjectiveResource) RecvPropInt( RECVINFO(m_nMannVsMachineMaxWaveCount) ), RecvPropInt( RECVINFO(m_nMannVsMachineWaveCount) ), RecvPropInt( RECVINFO(m_nMannVsMachineWaveEnemyCount) ), RecvPropInt( RECVINFO(m_nMvMWorldMoney) ), RecvPropFloat( RECVINFO( m_flMannVsMachineNextWaveTime ) ), RecvPropBool( RECVINFO( m_bMannVsMachineBetweenWaves ) ), RecvPropInt( RECVINFO(m_nFlagCarrierUpgradeLevel) ), RecvPropFloat( RECVINFO( m_flMvMBaseBombUpgradeTime ) ), RecvPropFloat( RECVINFO( m_flMvMNextBombUpgradeTime ) ), RecvPropString( RECVINFO( m_iszMvMPopfileName ) ), RecvPropInt( RECVINFO(m_iChallengeIndex) ), RecvPropInt( RECVINFO(m_nMvMEventPopfileType) ), RecvPropArray3( RECVINFO_ARRAY( m_nMannVsMachineWaveClassCounts ), RecvPropInt( RECVINFO( m_nMannVsMachineWaveClassCounts[0] ) ) ), RecvPropArray( RecvPropString( RECVINFO( m_iszMannVsMachineWaveClassNames[0]) ), m_iszMannVsMachineWaveClassNames ), RecvPropArray3( RECVINFO_ARRAY( m_nMannVsMachineWaveClassFlags ), RecvPropInt( RECVINFO( m_nMannVsMachineWaveClassFlags[0] ) ) ), RecvPropArray3( RECVINFO_ARRAY( m_nMannVsMachineWaveClassCounts2 ), RecvPropInt( RECVINFO( m_nMannVsMachineWaveClassCounts2[0] ) ) ), RecvPropArray( RecvPropString( RECVINFO( m_iszMannVsMachineWaveClassNames2[0]) ), m_iszMannVsMachineWaveClassNames2 ), RecvPropArray3( RECVINFO_ARRAY( m_nMannVsMachineWaveClassFlags2 ), RecvPropInt( RECVINFO( m_nMannVsMachineWaveClassFlags2[0] ) ) ), RecvPropArray3( RECVINFO_ARRAY( m_bMannVsMachineWaveClassActive ), RecvPropBool( RECVINFO( m_bMannVsMachineWaveClassActive[0] ) ) ), RecvPropArray3( RECVINFO_ARRAY( m_bMannVsMachineWaveClassActive2 ), RecvPropBool( RECVINFO( m_bMannVsMachineWaveClassActive2[0] ) ) ), END_RECV_TABLE() //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- C_TFObjectiveResource::C_TFObjectiveResource() { PrecacheMaterial( "sprites/obj_icons/icon_obj_cap_blu" ); PrecacheMaterial( "sprites/obj_icons/icon_obj_cap_blu_up" ); PrecacheMaterial( "sprites/obj_icons/icon_obj_cap_red" ); PrecacheMaterial( "sprites/obj_icons/icon_obj_cap_red_up" ); PrecacheMaterial( "VGUI/flagtime_empty" ); PrecacheMaterial( "VGUI/flagtime_full" ); m_nMannVsMachineMaxWaveCount = 0; m_nMannVsMachineWaveCount = 0; m_nMannVsMachineWaveEnemyCount = 0; m_nMvMWorldMoney = 0; m_flMannVsMachineNextWaveTime = 0; m_bMannVsMachineBetweenWaves = false; m_nFlagCarrierUpgradeLevel = 0; m_iChallengeIndex = -1; m_nMvMEventPopfileType = MVM_EVENT_POPFILE_NONE; memset( m_nMannVsMachineWaveClassCounts, 0, sizeof( m_nMannVsMachineWaveClassCounts ) ); memset( m_nMannVsMachineWaveClassCounts2, 0, sizeof( m_nMannVsMachineWaveClassCounts2 ) ); memset( m_nMannVsMachineWaveClassFlags, MVM_CLASS_FLAG_NONE, sizeof( m_nMannVsMachineWaveClassFlags ) ); memset( m_nMannVsMachineWaveClassFlags2, MVM_CLASS_FLAG_NONE, sizeof( m_nMannVsMachineWaveClassFlags2 ) ); memset( m_bMannVsMachineWaveClassActive, 0, sizeof( m_bMannVsMachineWaveClassActive ) ); memset( m_bMannVsMachineWaveClassActive2, 0, sizeof( m_bMannVsMachineWaveClassActive2 ) ); int i = 0; for ( i = 0 ; i < ARRAYSIZE( m_iszMannVsMachineWaveClassNames ) ; ++i ) { m_iszMannVsMachineWaveClassNames[ i ][ 0 ] = '\0'; } for ( i = 0 ; i < ARRAYSIZE( m_iszMannVsMachineWaveClassNames2 ) ; ++i ) { m_iszMannVsMachineWaveClassNames2[ i ][ 0 ] = '\0'; } } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- C_TFObjectiveResource::~C_TFObjectiveResource() { } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- const char *C_TFObjectiveResource::GetGameSpecificCPCappingSwipe( int index_, int iCappingTeam ) { Assert( index_ < m_iNumControlPoints ); Assert( iCappingTeam != TEAM_UNASSIGNED ); if ( iCappingTeam == TF_TEAM_RED ) return "sprites/obj_icons/icon_obj_cap_red"; return "sprites/obj_icons/icon_obj_cap_blu"; } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- const char *C_TFObjectiveResource::GetGameSpecificCPBarFG( int index_, int iOwningTeam ) { Assert( index_ < m_iNumControlPoints ); if ( iOwningTeam == TF_TEAM_RED ) return "progress_bar_red"; if ( iOwningTeam == TF_TEAM_BLUE ) return "progress_bar_blu"; return "progress_bar"; } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- const char *C_TFObjectiveResource::GetGameSpecificCPBarBG( int index_, int iCappingTeam ) { Assert( index_ < m_iNumControlPoints ); Assert( iCappingTeam != TEAM_UNASSIGNED ); if ( iCappingTeam == TF_TEAM_RED ) return "progress_bar_red"; return "progress_bar_blu"; } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- void C_TFObjectiveResource::SetCappingTeam( int index_, int team ) { //Display warning that someone is capping our point. //Only do this at the start of a cap and if WE own the point. //Also don't warn on a point that will do a "Last Point cap" warning. if ( GetNumControlPoints() > 0 && GetCapWarningLevel( index_ ) == CP_WARN_NORMAL && GetCPCapPercentage( index_ ) == 0.0f && team != TEAM_UNASSIGNED ) { C_BasePlayer *pLocalPlayer = C_BasePlayer::GetLocalPlayer(); if ( pLocalPlayer ) { if ( pLocalPlayer->GetTeamNumber() != team ) { CLocalPlayerFilter filter; if ( GetOwningTeam( index_ ) != TEAM_UNASSIGNED ) { C_BaseEntity::EmitSound( filter, -1, "Announcer.ControlPointContested" ); } else { C_BaseEntity::EmitSound( filter, -1, "Announcer.ControlPointContested_Neutral" ); } } } } BaseClass::SetCappingTeam( index_, team ); } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- int C_TFObjectiveResource::GetMannVsMachineWaveClassCount( int nIndex ) { if ( nIndex < ARRAYSIZE( m_nMannVsMachineWaveClassCounts ) ) { return m_nMannVsMachineWaveClassCounts[ nIndex ]; } nIndex -= ARRAYSIZE( m_nMannVsMachineWaveClassCounts ); if ( nIndex < ARRAYSIZE( m_nMannVsMachineWaveClassCounts2 ) ) { return m_nMannVsMachineWaveClassCounts2[ nIndex ]; } return 0; } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- const char *C_TFObjectiveResource::GetMannVsMachineWaveClassName( int nIndex ) { if ( nIndex < ARRAYSIZE( m_iszMannVsMachineWaveClassNames ) ) { return m_iszMannVsMachineWaveClassNames[ nIndex ]; } nIndex -= ARRAYSIZE( m_iszMannVsMachineWaveClassNames ); if ( nIndex < ARRAYSIZE( m_iszMannVsMachineWaveClassNames2 ) ) { return m_iszMannVsMachineWaveClassNames2[ nIndex ]; } return ""; } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- unsigned int C_TFObjectiveResource::GetMannVsMachineWaveClassFlags( int nIndex ) { if ( nIndex < ARRAYSIZE( m_nMannVsMachineWaveClassFlags ) ) { return m_nMannVsMachineWaveClassFlags[ nIndex ]; } nIndex -= ARRAYSIZE( m_nMannVsMachineWaveClassFlags ); if ( nIndex < ARRAYSIZE( m_nMannVsMachineWaveClassFlags2 ) ) { return m_nMannVsMachineWaveClassFlags2[ nIndex ]; } return 0; } //----------------------------------------------------------------------------- // Purpose: //----------------------------------------------------------------------------- bool C_TFObjectiveResource::GetMannVsMachineWaveClassActive( int nIndex ) { if ( nIndex < ARRAYSIZE( m_bMannVsMachineWaveClassActive ) ) { return m_bMannVsMachineWaveClassActive[ nIndex ]; } nIndex -= ARRAYSIZE( m_bMannVsMachineWaveClassActive ); if ( nIndex < ARRAYSIZE( m_bMannVsMachineWaveClassActive2 ) ) { return m_bMannVsMachineWaveClassActive2[ nIndex ]; } return 0; }