mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2025-09-20 04:26:03 +08:00
Added most recent version of unmodified HL2 SDK for Orange Box engine
This commit is contained in:
172
game/shared/sdk/weapon_sdkbase.cpp
Normal file
172
game/shared/sdk/weapon_sdkbase.cpp
Normal file
@ -0,0 +1,172 @@
|
||||
//========= Copyright <20> 1996-2005, Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
// $NoKeywords: $
|
||||
//=============================================================================//
|
||||
|
||||
#include "cbase.h"
|
||||
#include "in_buttons.h"
|
||||
#include "takedamageinfo.h"
|
||||
#include "weapon_sdkbase.h"
|
||||
#include "ammodef.h"
|
||||
|
||||
|
||||
#if defined( CLIENT_DLL )
|
||||
|
||||
#include "c_sdk_player.h"
|
||||
|
||||
#else
|
||||
|
||||
#include "sdk_player.h"
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
// ----------------------------------------------------------------------------- //
|
||||
// Global functions.
|
||||
// ----------------------------------------------------------------------------- //
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
static const char * s_WeaponAliasInfo[] =
|
||||
{
|
||||
"none", // WEAPON_NONE
|
||||
"mp5", // WEAPON_MP5
|
||||
"shotgun", // WEAPON_SHOTGUN
|
||||
"grenade", // WEAPON_GRENADE
|
||||
NULL, // WEAPON_NONE
|
||||
};
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Given an alias, return the associated weapon ID
|
||||
//
|
||||
int AliasToWeaponID( const char *alias )
|
||||
{
|
||||
if (alias)
|
||||
{
|
||||
for( int i=0; s_WeaponAliasInfo[i] != NULL; ++i )
|
||||
if (!Q_stricmp( s_WeaponAliasInfo[i], alias ))
|
||||
return i;
|
||||
}
|
||||
|
||||
return WEAPON_NONE;
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------------------------------------------
|
||||
//
|
||||
// Given a weapon ID, return its alias
|
||||
//
|
||||
const char *WeaponIDToAlias( int id )
|
||||
{
|
||||
if ( (id >= WEAPON_MAX) || (id < 0) )
|
||||
return NULL;
|
||||
|
||||
return s_WeaponAliasInfo[id];
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------- //
|
||||
// CWeaponSDKBase tables.
|
||||
// ----------------------------------------------------------------------------- //
|
||||
|
||||
IMPLEMENT_NETWORKCLASS_ALIASED( WeaponSDKBase, DT_WeaponSDKBase )
|
||||
|
||||
BEGIN_NETWORK_TABLE( CWeaponSDKBase, DT_WeaponSDKBase )
|
||||
#ifdef CLIENT_DLL
|
||||
|
||||
#else
|
||||
// world weapon models have no animations
|
||||
SendPropExclude( "DT_AnimTimeMustBeFirst", "m_flAnimTime" ),
|
||||
SendPropExclude( "DT_BaseAnimating", "m_nSequence" ),
|
||||
#endif
|
||||
END_NETWORK_TABLE()
|
||||
|
||||
#ifdef CLIENT_DLL
|
||||
BEGIN_PREDICTION_DATA( CWeaponSDKBase )
|
||||
DEFINE_PRED_FIELD( m_flTimeWeaponIdle, FIELD_FLOAT, FTYPEDESC_OVERRIDE | FTYPEDESC_NOERRORCHECK ),
|
||||
END_PREDICTION_DATA()
|
||||
#endif
|
||||
|
||||
LINK_ENTITY_TO_CLASS( weapon_sdk_base, CWeaponSDKBase );
|
||||
|
||||
|
||||
#ifdef GAME_DLL
|
||||
|
||||
BEGIN_DATADESC( CWeaponSDKBase )
|
||||
|
||||
// New weapon Think and Touch Functions go here..
|
||||
|
||||
END_DATADESC()
|
||||
|
||||
#endif
|
||||
|
||||
#ifdef CLIENT_DLL
|
||||
bool CWeaponSDKBase::ShouldPredict()
|
||||
{
|
||||
if ( GetOwner() && GetOwner() == C_BasePlayer::GetLocalPlayer())
|
||||
return true;
|
||||
|
||||
return BaseClass::ShouldPredict();
|
||||
}
|
||||
#endif
|
||||
// ----------------------------------------------------------------------------- //
|
||||
// CWeaponCSBase implementation.
|
||||
// ----------------------------------------------------------------------------- //
|
||||
CWeaponSDKBase::CWeaponSDKBase()
|
||||
{
|
||||
SetPredictionEligible( true );
|
||||
|
||||
AddSolidFlags( FSOLID_TRIGGER ); // Nothing collides with these but it gets touches.
|
||||
}
|
||||
|
||||
const CSDKWeaponInfo &CWeaponSDKBase::GetSDKWpnData() const
|
||||
{
|
||||
const FileWeaponInfo_t *pWeaponInfo = &GetWpnData();
|
||||
const CSDKWeaponInfo *pSDKInfo;
|
||||
|
||||
#ifdef _DEBUG
|
||||
pSDKInfo = dynamic_cast< const CSDKWeaponInfo* >( pWeaponInfo );
|
||||
Assert( pSDKInfo );
|
||||
#else
|
||||
pSDKInfo = static_cast< const CSDKWeaponInfo* >( pWeaponInfo );
|
||||
#endif
|
||||
|
||||
return *pSDKInfo;
|
||||
}
|
||||
|
||||
bool CWeaponSDKBase::PlayEmptySound()
|
||||
{
|
||||
CPASAttenuationFilter filter( this );
|
||||
filter.UsePredictionRules();
|
||||
|
||||
EmitSound( filter, entindex(), "Default.ClipEmpty_Rifle" );
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
CSDKPlayer* CWeaponSDKBase::GetPlayerOwner() const
|
||||
{
|
||||
return dynamic_cast< CSDKPlayer* >( GetOwner() );
|
||||
}
|
||||
|
||||
#ifdef GAME_DLL
|
||||
|
||||
void CWeaponSDKBase::SendReloadEvents()
|
||||
{
|
||||
CSDKPlayer *pPlayer = dynamic_cast< CSDKPlayer* >( GetOwner() );
|
||||
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();
|
||||
|
||||
// Make the player play his reload animation.
|
||||
pPlayer->DoAnimationEvent( PLAYERANIMEVENT_RELOAD );
|
||||
}
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user