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/dod/c_dod_bombtarget.cpp | |
| download | archived-source-engine-2018-hl2-src-master.tar.xz archived-source-engine-2018-hl2-src-master.zip | |
Diffstat (limited to 'game/client/dod/c_dod_bombtarget.cpp')
| -rw-r--r-- | game/client/dod/c_dod_bombtarget.cpp | 115 |
1 files changed, 115 insertions, 0 deletions
diff --git a/game/client/dod/c_dod_bombtarget.cpp b/game/client/dod/c_dod_bombtarget.cpp new file mode 100644 index 0000000..c14ed1d --- /dev/null +++ b/game/client/dod/c_dod_bombtarget.cpp @@ -0,0 +1,115 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//============================================================================= + +#include "cbase.h" +#include "c_dod_bombtarget.h" +#include "dod_shareddefs.h" +#include "c_dod_player.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +IMPLEMENT_NETWORKCLASS_ALIASED( DODBombTarget, DT_DODBombTarget ) + +BEGIN_NETWORK_TABLE(C_DODBombTarget, DT_DODBombTarget ) + RecvPropInt( RECVINFO(m_iState) ), + RecvPropInt( RECVINFO(m_iBombingTeam) ), + + RecvPropInt( RECVINFO(m_iTargetModel) ), + RecvPropInt( RECVINFO(m_iUnavailableModel) ), +END_NETWORK_TABLE() + +void C_DODBombTarget::NotifyShouldTransmit( ShouldTransmitState_t state ) +{ + BaseClass::NotifyShouldTransmit( state ); + + // Turn off + if ( state == SHOULDTRANSMIT_END ) + { + SetNextClientThink( CLIENT_THINK_NEVER ); + } + + // Turn on + if ( state == SHOULDTRANSMIT_START ) + { + SetNextClientThink( CLIENT_THINK_ALWAYS ); + } +} + +void C_DODBombTarget::ClientThink( void ) +{ + // if we are near the player, maybe give them a hint! + + C_DODPlayer *pPlayer = C_DODPlayer::GetLocalDODPlayer(); + + if ( pPlayer && pPlayer->IsAlive() ) + { + Vector vecDist = GetAbsOrigin() - pPlayer->GetAbsOrigin(); + + if ( vecDist.Length() < 200 ) + { + int iOppositeTeam = ( m_iBombingTeam == TEAM_ALLIES ) ? TEAM_AXIS : TEAM_ALLIES; + if ( pPlayer->GetTeamNumber() == m_iBombingTeam && m_iState == BOMB_TARGET_ACTIVE ) + { + pPlayer->CheckBombTargetPlantHint(); + } + else if ( pPlayer->GetTeamNumber() == iOppositeTeam && m_iState == BOMB_TARGET_ARMED ) + { + pPlayer->CheckBombTargetDefuseHint(); + } + } + } + + SetNextClientThink( gpGlobals->curtime + 0.5 ); +} + +int C_DODBombTarget::DrawModel( int flags ) +{ + if ( m_iState == BOMB_TARGET_ACTIVE ) + { + C_DODPlayer *pPlayer = C_DODPlayer::GetLocalDODPlayer(); + + int iOppositeTeam = ( m_iBombingTeam == TEAM_ALLIES ) ? TEAM_AXIS : TEAM_ALLIES; + +#ifdef _DEBUG + if ( m_iBombingTeam == TEAM_UNASSIGNED ) + iOppositeTeam = TEAM_UNASSIGNED; +#endif + + if ( pPlayer && pPlayer->GetTeamNumber() == iOppositeTeam ) + { + // draw a different model for the non-planting team + + if ( GetModelIndex() != m_iUnavailableModel ) + { + SetModelIndex( m_iUnavailableModel ); + } + } + else + { + if ( GetModelIndex() != m_iTargetModel ) + { + SetModelIndex( m_iTargetModel ); + } + } + } + + return BaseClass::DrawModel( flags ); +} + +// a player of the passed team is looking at us, see if we should +// play the hint telling them how to defuse +bool C_DODBombTarget::ShouldPlayDefuseHint( int team ) +{ + return ( m_iState == BOMB_TARGET_ARMED && team != m_iBombingTeam ); +} + +// a player of the passed team is looking at us, see if we should +// play the hint telling them how to plant a bomb here +bool C_DODBombTarget::ShouldPlayPlantHint( int team ) +{ + return ( m_iState == BOMB_TARGET_ACTIVE && team == m_iBombingTeam ); +} |