summaryrefslogtreecommitdiff
path: root/game/shared/tf2/weapon_objectselection.cpp
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/shared/tf2/weapon_objectselection.cpp
downloadarchived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.tar.xz
archived-source-engine-2018-hl2-src-3bf9df6b2785fa6d951086978a3e66f49427166a.zip
Diffstat (limited to 'game/shared/tf2/weapon_objectselection.cpp')
-rw-r--r--game/shared/tf2/weapon_objectselection.cpp216
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