diff options
Diffstat (limited to 'game/shared/tf2/weapon_objectselection.cpp')
| -rw-r--r-- | game/shared/tf2/weapon_objectselection.cpp | 216 |
1 files changed, 216 insertions, 0 deletions
diff --git a/game/shared/tf2/weapon_objectselection.cpp b/game/shared/tf2/weapon_objectselection.cpp new file mode 100644 index 0000000..e04e8cb --- /dev/null +++ b/game/shared/tf2/weapon_objectselection.cpp @@ -0,0 +1,216 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// +#include "cbase.h" +#include "basetfplayer_shared.h" +#include "basetfcombatweapon_shared.h" + +#if defined( CLIENT_DLL ) +#include "hud.h" +#include <vgui_controls/Controls.h> +#include <vgui/ISurface.h> +#endif + +#include "weapon_objectselection.h" + +#if !defined( CLIENT_DLL ) +#include "weapon_builder.h" +#endif + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +LINK_ENTITY_TO_CLASS( weapon_objectselection, CWeaponObjectSelection ); + +PRECACHE_WEAPON_REGISTER( weapon_objectselection ); + +BEGIN_PREDICTION_DATA( CWeaponObjectSelection ) +END_PREDICTION_DATA() + +IMPLEMENT_NETWORKCLASS_ALIASED( WeaponObjectSelection, DT_WeaponObjectSelection ) + +BEGIN_NETWORK_TABLE( CWeaponObjectSelection, DT_WeaponObjectSelection ) +#if !defined( CLIENT_DLL ) + SendPropInt( SENDINFO( m_iObjectType ), 8, SPROP_UNSIGNED ), +#else + RecvPropInt( RECVINFO( m_iObjectType ) ), +#endif +END_NETWORK_TABLE() + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +CWeaponObjectSelection::CWeaponObjectSelection() +{ +#if defined( CLIENT_DLL ) + m_bNeedSpriteSetup = true; +#endif +} + +//----------------------------------------------------------------------------- +// Purpose: Deploy the builder weapon instead of this weapon, and tell it to switch to this object. +//----------------------------------------------------------------------------- +bool CWeaponObjectSelection::CanDeploy( void ) +{ + CBaseTFPlayer *pPlayer = ToBaseTFPlayer( GetOwner() ); + if (!pPlayer) + return false; + +#if !defined(CLIENT_DLL) + // Select a state for the builder weapon + CWeaponBuilder *pBuilder = pPlayer->GetWeaponBuilder(); + if ( pBuilder ) + { + pBuilder->SetCurrentObject( m_iObjectType ); + pPlayer->Weapon_Switch( pBuilder ); + pPlayer->SetNextAttack( gpGlobals->curtime ); + } +#endif + + // Never deploy this weapon + return false; +} + + +void CWeaponObjectSelection::SetType( int iType ) +{ + m_iObjectType = iType; +} + + +//----------------------------------------------------------------------------- +// Purpose: Setup the weapon selection sprite we should use for this weapon +//----------------------------------------------------------------------------- +void CWeaponObjectSelection::SetupObjectSelectionSprite( void ) +{ +#ifdef CLIENT_DLL + // Use the sprite details from the text file, with a custom sprite + char *iconTexture = GetObjectInfo( m_iObjectType )->m_pIconActive; + if ( iconTexture && iconTexture[ 0 ] ) + { + m_pSelectionTexture = gHUD.GetIcon( iconTexture ); + } + else + { + m_pSelectionTexture = NULL; + } +#endif +} + +//----------------------------------------------------------------------------- +// Purpose: Return true if this weapon has some ammo +//----------------------------------------------------------------------------- +bool CWeaponObjectSelection::HasAmmo( void ) +{ + CBaseTFPlayer *pOwner = ToBaseTFPlayer( GetOwner() ); + if ( !pOwner ) + return false; + + int iCost = CalculateObjectCost( m_iObjectType, pOwner->GetNumObjects(m_iObjectType), pOwner->GetTeamNumber() ); + return ( pOwner->GetBankResources() >= iCost ); +} + +#if defined( CLIENT_DLL ) +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CWeaponObjectSelection::PreDataUpdate( DataUpdateType_t updateType ) +{ + BaseClass::PreDataUpdate(updateType); + + m_iOldObjectType = m_iObjectType; +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : updateType - +//----------------------------------------------------------------------------- +void CWeaponObjectSelection::PostDataUpdate( DataUpdateType_t updateType ) +{ + BaseClass::PostDataUpdate( updateType ); + + // Note, can't do this in OnDataChanged since you can get multiple + // predataupdates/postdataupdates in one frame but only one OnDataChanged just before + // rendering + if ( m_iOldObjectType != m_iObjectType ) + { + m_bNeedSpriteSetup = true; + } +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CWeaponObjectSelection::OnDataChanged( DataUpdateType_t updateType ) +{ + BaseClass::OnDataChanged(updateType); + + // If our type has changed or we've never been set up, then + // setup our object selection sprite + if ( m_bNeedSpriteSetup) + { + m_bNeedSpriteSetup = false; + SetupObjectSelectionSprite(); + } +} +#endif + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +int CWeaponObjectSelection::GetSubType( void ) +{ +#if !defined( CLIENT_DLL ) + return BaseClass::GetSubType(); +#else + // We don't network down the subtype, so use out object type + return m_iObjectType; +#endif +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +int CWeaponObjectSelection::GetSlot( void ) const +{ + return GetObjectInfo( m_iObjectType )->m_SelectionSlot; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +int CWeaponObjectSelection::GetPosition( void ) const +{ + return GetObjectInfo( m_iObjectType )->m_SelectionPosition; +} + +//----------------------------------------------------------------------------- +// Purpose: +// Output : char const +//----------------------------------------------------------------------------- +const char *CWeaponObjectSelection::GetPrintName( void ) const +{ + return GetObjectInfo( m_iObjectType )->m_pStatusName; +} + +#if defined( CLIENT_DLL ) +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +CHudTexture const * CWeaponObjectSelection::GetSpriteActive( void ) const +{ + return m_pSelectionTexture; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +CHudTexture const * CWeaponObjectSelection::GetSpriteInactive( void ) const +{ + return m_pSelectionTexture; +} + +#endif
\ No newline at end of file |