diff options
Diffstat (limited to 'game/shared/tf2/weapon_combat_usedwithshieldbase.cpp')
| -rw-r--r-- | game/shared/tf2/weapon_combat_usedwithshieldbase.cpp | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/game/shared/tf2/weapon_combat_usedwithshieldbase.cpp b/game/shared/tf2/weapon_combat_usedwithshieldbase.cpp new file mode 100644 index 0000000..53fc9a2 --- /dev/null +++ b/game/shared/tf2/weapon_combat_usedwithshieldbase.cpp @@ -0,0 +1,111 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// + +#include "cbase.h" +#include "basetfplayer_shared.h" +#include "weapon_combat_usedwithshieldbase.h" +#include "weapon_combatshield.h" +#include "weapon_twohandedcontainer.h" + +//----------------------------------------------------------------------------- +// Purpose: Make sure we're not switching directly to this weapon, since this +// weapon can only be "switched" to by the twohandedcontainer weapon. +//----------------------------------------------------------------------------- +bool CWeaponCombatUsedWithShieldBase::CanDeploy( void ) +{ + CBaseTFPlayer *pPlayer = ToBaseTFPlayer( GetOwner() ); + if (!pPlayer) + return false; + + // Make sure the current weapon is a twohanded weapon container + CWeaponTwoHandedContainer *pContainer = dynamic_cast<CWeaponTwoHandedContainer*>(pPlayer->GetActiveWeapon()); + if ( !pContainer ) + { + // Not the two handed container, so deploy the two handed container instead + pContainer = ( CWeaponTwoHandedContainer * )pPlayer->Weapon_OwnsThisType( "weapon_twohandedcontainer" ); + if ( !pContainer ) + return BaseClass::Deploy(); + + // Deploy the container + pPlayer->Weapon_Switch( pContainer ); + + // Make sure the container's using the desired weapon + pContainer->SetWeapons( this, pContainer->GetRightWeapon() ); + return false; + } + + return BaseClass::CanDeploy(); +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : allow - +//----------------------------------------------------------------------------- +void CWeaponCombatUsedWithShieldBase::AllowShieldPostFrame( bool allow ) +{ + CBaseTFPlayer *pOwner = ToBaseTFPlayer( GetOwner() ); + if (!pOwner) + return; + + CWeaponCombatShield *shield = static_cast< CWeaponCombatShield * >( pOwner->Weapon_OwnsThisType( "weapon_combat_shield" ) ); + if ( !shield ) + return; + + shield->SetAllowPostFrame( allow ); +} + +//----------------------------------------------------------------------------- +// Purpose: +// Output : int +//----------------------------------------------------------------------------- +int CWeaponCombatUsedWithShieldBase::GetShieldState( void ) +{ + CBaseTFPlayer *pOwner = ToBaseTFPlayer( GetOwner() ); + if ( !pOwner ) + return SS_DOWN; + + CWeaponCombatShield *pShield = pOwner->GetCombatShield(); + if ( !pShield ) + return SS_DOWN; + + return pShield->GetShieldState(); +} + +//----------------------------------------------------------------------------- +// Purpose: Mirror the values in the container, if there is one +// Input : *pPlayer - +// Output : int +//----------------------------------------------------------------------------- +int CWeaponCombatUsedWithShieldBase::UpdateClientData( CBasePlayer *pPlayer ) +{ + if ( !pPlayer ) + { + return BaseClass::UpdateClientData( pPlayer ); + } + + CWeaponTwoHandedContainer *pContainer = ( CWeaponTwoHandedContainer * )pPlayer->Weapon_OwnsThisType( "weapon_twohandedcontainer" ); + if ( !pContainer || pContainer != pPlayer->GetActiveWeapon() ) + return BaseClass::UpdateClientData( pPlayer ); + + // Make sure this weapon is one of the container's active weapons + if ( pContainer->GetLeftWeapon() != this && pContainer->GetRightWeapon() != this ) + return BaseClass::UpdateClientData( pPlayer ); + + int retval = pContainer->UpdateClientData( pPlayer ); + m_iState = pContainer->m_iState; + return retval; +} + +LINK_ENTITY_TO_CLASS( weapon_combat_usedwithshieldbase, CWeaponCombatUsedWithShieldBase ); + +IMPLEMENT_NETWORKCLASS_ALIASED( WeaponCombatUsedWithShieldBase, DT_WeaponCombatUsedWithShieldBase ) + +BEGIN_NETWORK_TABLE( CWeaponCombatUsedWithShieldBase, DT_WeaponCombatUsedWithShieldBase ) +END_NETWORK_TABLE() + +BEGIN_PREDICTION_DATA( CWeaponCombatUsedWithShieldBase ) +END_PREDICTION_DATA() |