summaryrefslogtreecommitdiff
path: root/game/shared/tfc/weapon_tfcbase.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'game/shared/tfc/weapon_tfcbase.cpp')
-rw-r--r--game/shared/tfc/weapon_tfcbase.cpp193
1 files changed, 193 insertions, 0 deletions
diff --git a/game/shared/tfc/weapon_tfcbase.cpp b/game/shared/tfc/weapon_tfcbase.cpp
new file mode 100644
index 0000000..0d697bc
--- /dev/null
+++ b/game/shared/tfc/weapon_tfcbase.cpp
@@ -0,0 +1,193 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#include "cbase.h"
+#include "in_buttons.h"
+#include "takedamageinfo.h"
+#include "weapon_tfcbase.h"
+#include "ammodef.h"
+#include "tfc_gamerules.h"
+
+extern IVModelInfo* modelinfo;
+
+
+#if defined( CLIENT_DLL )
+
+ #include "vgui/ISurface.h"
+ #include "vgui_controls/Controls.h"
+ #include "c_tfc_player.h"
+ #include "hud_crosshair.h"
+
+#else
+
+ #include "tfc_player.h"
+
+#endif
+
+
+// ----------------------------------------------------------------------------- //
+// Global functions.
+// ----------------------------------------------------------------------------- //
+
+bool IsAmmoType( int iAmmoType, const char *pAmmoName )
+{
+ return GetAmmoDef()->Index( pAmmoName ) == iAmmoType;
+}
+
+
+// ----------------------------------------------------------------------------- //
+// CWeaponTFCBase tables.
+// ----------------------------------------------------------------------------- //
+
+IMPLEMENT_NETWORKCLASS_ALIASED( WeaponTFCBase, DT_WeaponTFCBase )
+
+BEGIN_NETWORK_TABLE( CWeaponTFCBase, DT_WeaponTFCBase )
+END_NETWORK_TABLE()
+
+BEGIN_PREDICTION_DATA( CWeaponTFCBase )
+END_PREDICTION_DATA()
+
+LINK_ENTITY_TO_CLASS( weapon_tfc_base, CWeaponTFCBase );
+
+
+#ifdef GAME_DLL
+
+ BEGIN_DATADESC( CWeaponTFCBase )
+
+ DEFINE_FUNCTION( FallThink )
+
+ END_DATADESC()
+
+#endif
+
+#ifdef CLIENT_DLL
+ ConVar cl_crosshaircolor( "cl_crosshaircolor", "0", FCVAR_CLIENTDLL | FCVAR_ARCHIVE );
+ ConVar cl_dynamiccrosshair( "cl_dynamiccrosshair", "1", FCVAR_CLIENTDLL | FCVAR_ARCHIVE );
+ ConVar cl_scalecrosshair( "cl_scalecrosshair", "1", FCVAR_CLIENTDLL | FCVAR_ARCHIVE );
+ ConVar cl_crosshairalpha( "cl_crosshairalpha", "200", FCVAR_CLIENTDLL | FCVAR_ARCHIVE );
+
+ int g_iScopeTextureID = 0;
+ int g_iScopeDustTextureID = 0;
+#endif
+
+// ----------------------------------------------------------------------------- //
+// CWeaponTFCBase implementation.
+// ----------------------------------------------------------------------------- //
+CWeaponTFCBase::CWeaponTFCBase()
+{
+ SetPredictionEligible( true );
+ AddSolidFlags( FSOLID_TRIGGER ); // Nothing collides with these but it gets touches.
+}
+
+
+bool CWeaponTFCBase::IsPredicted() const
+{
+ return true;
+}
+
+CTFCPlayer* CWeaponTFCBase::GetPlayerOwner() const
+{
+ return dynamic_cast< CTFCPlayer* >( GetOwner() );
+}
+
+const CTFCWeaponInfo &CWeaponTFCBase::GetTFCWpnData() const
+{
+ const FileWeaponInfo_t *pWeaponInfo = &GetWpnData();
+ const CTFCWeaponInfo *pTFCInfo;
+
+ #ifdef _DEBUG
+ pTFCInfo = dynamic_cast< const CTFCWeaponInfo* >( pWeaponInfo );
+ Assert( pTFCInfo );
+ #else
+ pTFCInfo = static_cast< const CTFCWeaponInfo* >( pWeaponInfo );
+ #endif
+
+ return *pTFCInfo;
+}
+
+
+TFCWeaponID CWeaponTFCBase::GetWeaponID( void ) const
+{
+ Assert( false ); return WEAPON_NONE;
+}
+
+
+bool CWeaponTFCBase::IsA( TFCWeaponID id ) const
+{
+ return GetWeaponID() == id;
+}
+
+
+bool CWeaponTFCBase::IsSilenced( void ) const
+{
+ return false;
+}
+
+
+void CWeaponTFCBase::Precache( void )
+{
+ BaseClass::Precache();
+}
+
+
+#ifdef CLIENT_DLL
+
+#else // CLIENT_DLL
+
+ void CWeaponTFCBase::Spawn()
+ {
+ BaseClass::Spawn();
+
+ // Set this here to allow players to shoot dropped weapons
+ SetCollisionGroup( COLLISION_GROUP_WEAPON );
+
+ // Move it up a little bit, otherwise it'll be at the guy's feet, and its sound origin
+ // will be in the ground so its EmitSound calls won't do anything.
+ SetLocalOrigin( Vector( 0, 0, 5 ) );
+ }
+
+ bool CWeaponTFCBase::DefaultReload( int iClipSize1, int iClipSize2, int iActivity )
+ {
+ if ( BaseClass::DefaultReload( iClipSize1, iClipSize2, iActivity ) )
+ {
+ SendReloadSoundEvent();
+ return true;
+ }
+ else
+ {
+ return false;
+ }
+ }
+
+ void CWeaponTFCBase::SendReloadSoundEvent()
+ {
+ CBasePlayer *pPlayer = GetPlayerOwner();
+
+ assert( pPlayer );
+
+ if ( !pPlayer )
+ return;
+
+ // Send a message to any clients that have this entity to play the reload.
+ CPASFilter filter( pPlayer->GetAbsOrigin() );
+ filter.RemoveRecipient( pPlayer );
+
+ UserMessageBegin( filter, "ReloadEffect" );
+ WRITE_SHORT( pPlayer->entindex() );
+ MessageEnd();
+ }
+
+ Vector CWeaponTFCBase::GetSoundEmissionOrigin() const
+ {
+ CBasePlayer *pPlayer = GetPlayerOwner();
+ if ( pPlayer )
+ return pPlayer->WorldSpaceCenter();
+ else
+ return WorldSpaceCenter();
+ }
+
+#endif