You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
193 lines
4.3 KiB
193 lines
4.3 KiB
//========= 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
|
|
|