diff options
Diffstat (limited to 'game/server/hl2/weapon_thumper.cpp')
| -rw-r--r-- | game/server/hl2/weapon_thumper.cpp | 295 |
1 files changed, 295 insertions, 0 deletions
diff --git a/game/server/hl2/weapon_thumper.cpp b/game/server/hl2/weapon_thumper.cpp new file mode 100644 index 0000000..00275a0 --- /dev/null +++ b/game/server/hl2/weapon_thumper.cpp @@ -0,0 +1,295 @@ +//========= 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; +} +*/
\ No newline at end of file |