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.
295 lines
6.2 KiB
295 lines
6.2 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: 'weapon' what lets the player controll the rollerbuddy. |
|
// |
|
// $Revision: $ |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#include "cbase.h" |
|
#include "basehlcombatweapon.h" |
|
#include "NPCevent.h" |
|
#include "basecombatcharacter.h" |
|
#include "ai_basenpc.h" |
|
#include "player.h" |
|
#include "entitylist.h" |
|
#include "ndebugoverlay.h" |
|
#include "soundent.h" |
|
#include "engine/IEngineSound.h" |
|
#include "rotorwash.h" |
|
|
|
// memdbgon must be the last include file in a .cpp file!!! |
|
#include "tier0/memdbgon.h" |
|
|
|
ConVar thumpFrequency( "thumpfrequency", "2" ); |
|
ConVar thumpRadius( "thumpradius", "512" ); |
|
|
|
|
|
//========================================================= |
|
//========================================================= |
|
class CPortableThumper : public CBaseAnimating |
|
{ |
|
DECLARE_CLASS( CPortableThumper, CBaseAnimating ); |
|
private: |
|
|
|
void ThumpThink( void ); |
|
void ThumperUse( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ); |
|
void Precache( void ); |
|
void Spawn( void ); |
|
|
|
int ObjectCaps( void ) { return FCAP_IMPULSE_USE; } |
|
|
|
DECLARE_DATADESC(); |
|
}; |
|
|
|
LINK_ENTITY_TO_CLASS( portable_thumper, CPortableThumper ); |
|
|
|
|
|
|
|
void CPortableThumper::Precache( void ) |
|
{ |
|
PrecacheModel( "models/fire_equipment/w_firehydrant.mdl" ); |
|
} |
|
|
|
void CPortableThumper::Spawn( void ) |
|
{ |
|
m_takedamage = DAMAGE_NO; |
|
|
|
SetModel( "models/fire_equipment/w_firehydrant.mdl" ); |
|
|
|
Vector vecBBMin, vecBBMax; |
|
|
|
vecBBMin.z = 0; |
|
vecBBMin.x = -16; |
|
vecBBMin.y = -16; |
|
|
|
vecBBMax.z = 32; |
|
vecBBMax.x = 16; |
|
vecBBMax.y = 16; |
|
|
|
SetSolid( SOLID_BBOX ); |
|
UTIL_SetSize( this, vecBBMin, vecBBMax ); |
|
|
|
SetThink( ThumpThink ); |
|
SetUse( ThumperUse ); |
|
SetNextThink( gpGlobals->curtime + thumpFrequency.GetFloat() ); |
|
} |
|
|
|
void CPortableThumper::ThumperUse( CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE useType, float value ) |
|
{ |
|
if( !pActivator->IsPlayer() ) |
|
{ |
|
return; |
|
} |
|
|
|
CBasePlayer *pPlayer; |
|
|
|
pPlayer = (CBasePlayer *)pActivator; |
|
pPlayer->GiveNamedItem( "weapon_thumper" ); |
|
|
|
UTIL_Remove( this ); |
|
} |
|
|
|
void CPortableThumper::ThumpThink( void ) |
|
{ |
|
EmitSound( "PortableThumper.ThumpSound" ); |
|
|
|
UTIL_RotorWash( GetAbsOrigin() + Vector( 0, 0, 32 ), Vector( 0, 0, -1 ), 512 ); |
|
|
|
SetNextThink( gpGlobals->curtime + thumpFrequency.GetFloat() ); |
|
|
|
CSoundEnt::InsertSound( SOUND_THUMPER, GetAbsOrigin(), thumpRadius.GetInt(), 0.2, this ); |
|
} |
|
|
|
BEGIN_DATADESC( CPortableThumper ) |
|
|
|
DEFINE_FUNCTION( ThumpThink ), |
|
DEFINE_FUNCTION( ThumperUse ), |
|
|
|
END_DATADESC() |
|
|
|
|
|
|
|
|
|
|
|
|
|
class CWeaponThumper: public CBaseHLCombatWeapon |
|
{ |
|
DECLARE_CLASS( CWeaponThumper, CBaseHLCombatWeapon ); |
|
public: |
|
DECLARE_SERVERCLASS(); |
|
void Spawn( void ); |
|
void Precache( void ); |
|
|
|
int CapabilitiesGet( void ) { return bits_CAP_WEAPON_RANGE_ATTACK1; } |
|
void PrimaryAttack( void ); |
|
bool Reload( void ); |
|
void DecrementAmmo( CBaseCombatCharacter *pOwner ); |
|
}; |
|
|
|
IMPLEMENT_SERVERCLASS_ST(CWeaponThumper, DT_WeaponThumper) |
|
END_SEND_TABLE() |
|
|
|
LINK_ENTITY_TO_CLASS( weapon_thumper, CWeaponThumper ); |
|
PRECACHE_WEAPON_REGISTER(weapon_thumper); |
|
|
|
void CWeaponThumper::Spawn( ) |
|
{ |
|
BaseClass::Spawn(); |
|
|
|
Precache( ); |
|
|
|
UTIL_SetSize(this, Vector(-4,-4,-2),Vector(4,4,2)); |
|
|
|
FallInit();// get ready to fall down |
|
} |
|
|
|
void CWeaponThumper::Precache( void ) |
|
{ |
|
BaseClass::Precache(); |
|
UTIL_PrecacheOther( "portable_thumper" ); |
|
|
|
PrecacheScriptSound( "PortableThumper.ThumpSound" ); |
|
|
|
} |
|
|
|
bool CWeaponThumper::Reload( void ) |
|
{ |
|
WeaponIdle(); |
|
return true; |
|
} |
|
|
|
void CWeaponThumper::PrimaryAttack( void ) |
|
{ |
|
CBasePlayer *pPlayer = ToBasePlayer( GetOwner() ); |
|
if ( !pPlayer ) |
|
return; |
|
|
|
DecrementAmmo( pPlayer ); |
|
|
|
trace_t tr; |
|
|
|
Vector vecStart, vecDir; |
|
|
|
Vector vecForward; |
|
Vector vecSpot; |
|
|
|
pPlayer->GetVectors( &vecForward, NULL, NULL ); |
|
|
|
vecForward.z = 0.0; |
|
|
|
vecStart = pPlayer->WorldSpaceCenter() + vecForward * 64; |
|
|
|
UTIL_TraceLine( vecStart, vecStart - Vector( 0, 0, 128 ), MASK_SHOT, pPlayer, COLLISION_GROUP_NONE, &tr ); |
|
|
|
if( tr.fraction != 1.0 ) |
|
{ |
|
Create( "portable_thumper", tr.endpos, vec3_angle, NULL ); |
|
m_flNextPrimaryAttack = gpGlobals->curtime + 0.5; |
|
} |
|
|
|
m_flNextPrimaryAttack = gpGlobals->curtime + 0.5; |
|
} |
|
|
|
|
|
void CWeaponThumper::DecrementAmmo( CBaseCombatCharacter *pOwner ) |
|
{ |
|
pOwner->RemoveAmmo( 1, m_iPrimaryAmmoType ); |
|
|
|
if (pOwner->GetAmmoCount(m_iPrimaryAmmoType) <= 0) |
|
{ |
|
pOwner->Weapon_Drop( this ); |
|
UTIL_Remove(this); |
|
} |
|
} |
|
|
|
/* |
|
//========================================================= |
|
//========================================================= |
|
class CWeaponThumper : public CBaseHLCombatWeapon |
|
{ |
|
public: |
|
DECLARE_CLASS( CWeaponThumper, CBaseHLCombatWeapon ); |
|
|
|
CWeaponThumper(); |
|
|
|
DECLARE_SERVERCLASS(); |
|
|
|
void Precache( void ); |
|
bool Deploy( void ); |
|
|
|
int CapabilitiesGet( void ) { return bits_CAP_WEAPON_RANGE_ATTACK1; } |
|
|
|
void PrimaryAttack( void ); |
|
void SecondaryAttack( void ); |
|
|
|
DECLARE_ACTTABLE(); |
|
}; |
|
|
|
IMPLEMENT_SERVERCLASS_ST(CWeaponThumper, DT_WeaponThumper) |
|
END_SEND_TABLE() |
|
|
|
LINK_ENTITY_TO_CLASS( weapon_thumper, CWeaponThumper ); |
|
PRECACHE_WEAPON_REGISTER(weapon_thumper); |
|
|
|
acttable_t CWeaponThumper::m_acttable[] = |
|
{ |
|
{ ACT_RANGE_ATTACK1, ACT_RANGE_ATTACK_AR1, true }, |
|
}; |
|
|
|
IMPLEMENT_ACTTABLE(CWeaponThumper); |
|
|
|
CWeaponThumper::CWeaponThumper( ) |
|
{ |
|
} |
|
|
|
void CWeaponThumper::Precache( void ) |
|
{ |
|
UTIL_PrecacheOther( "portable_thumper" ); |
|
BaseClass::Precache(); |
|
} |
|
|
|
bool CWeaponThumper::Deploy( void ) |
|
{ |
|
bool fReturn; |
|
|
|
fReturn = BaseClass::Deploy(); |
|
|
|
m_flNextPrimaryAttack = gpGlobals->curtime; |
|
m_flNextSecondaryAttack = gpGlobals->curtime; |
|
m_hOwner->m_flNextAttack = gpGlobals->curtime + 0.0; |
|
|
|
return fReturn; |
|
} |
|
|
|
void CWeaponThumper::PrimaryAttack( void ) |
|
{ |
|
trace_t tr; |
|
|
|
Vector vecStart, vecDir; |
|
|
|
Vector vecForward; |
|
Vector vecSpot; |
|
|
|
m_hOwner->GetVectors( &vecForward, NULL, NULL ); |
|
|
|
vecForward.z = 0.0; |
|
|
|
vecStart = m_hOwner->Center() + vecForward * 64; |
|
|
|
UTIL_TraceLine( vecStart, vecStart - Vector( 0, 0, 128 ), MASK_SHOT, m_hOwner, COLLISION_GROUP_NONE, &tr ); |
|
|
|
if( tr.fraction != 1.0 ) |
|
{ |
|
Create( "portable_thumper", tr.endpos, vec3_origin, NULL ); |
|
m_flNextPrimaryAttack = gpGlobals->curtime + 0.5; |
|
} |
|
|
|
m_hOwner->m_iAmmo[m_iPrimaryAmmoType]++; |
|
} |
|
|
|
void CWeaponThumper::SecondaryAttack( void ) |
|
{ |
|
m_flNextSecondaryAttack = gpGlobals->curtime + 0.5; |
|
} |
|
*/ |