mirror of
https://github.com/nillerusr/source-engine.git
synced 2026-09-01 06:59:20 +00:00
upload "kind" alien swarm
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
#include "cbase.h"
|
||||
#include "asw_grenade_freeze.h"
|
||||
#include "asw_gamerules.h"
|
||||
#include "world.h"
|
||||
#include "asw_util_shared.h"
|
||||
#include "iasw_spawnable_npc.h"
|
||||
#include "asw_marine.h"
|
||||
#include "asw_marine_resource.h"
|
||||
#include "asw_fx_shared.h"
|
||||
#include "particle_parse.h"
|
||||
#include "te_effect_dispatch.h"
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS( asw_grenade_freeze, CASW_Grenade_Freeze );
|
||||
PRECACHE_REGISTER( asw_grenade_freeze );
|
||||
|
||||
BEGIN_DATADESC( CASW_Grenade_Freeze )
|
||||
DEFINE_FIELD( m_flFreezeAmount, FIELD_FLOAT ),
|
||||
END_DATADESC()
|
||||
|
||||
void CASW_Grenade_Freeze::DoExplosion()
|
||||
{
|
||||
// Spawn a freeze explosion effect
|
||||
DispatchParticleEffect( "freeze_grenade_explosion", GetAbsOrigin(), Vector( m_DmgRadius, 0, 0 ), QAngle( 0, 0, 0 ) );
|
||||
EmitSound( "ASW_Freeze_Grenade.Explode" );
|
||||
|
||||
// Add freeze to all creatures in the radius
|
||||
ASWGameRules()->FreezeAliensInRadius( m_hFirer.Get(), m_flFreezeAmount, GetAbsOrigin(), m_DmgRadius );
|
||||
}
|
||||
|
||||
void CASW_Grenade_Freeze::Precache()
|
||||
{
|
||||
BaseClass::Precache();
|
||||
|
||||
PrecacheParticleSystem( "freeze_grenade_explosion" );
|
||||
PrecacheParticleSystem( "grenade_freeze_main_trail" );
|
||||
PrecacheScriptSound( "ASW_Freeze_Grenade.Explode" );
|
||||
}
|
||||
|
||||
CASW_Grenade_Freeze* CASW_Grenade_Freeze::Freeze_Grenade_Create( float flDamage, float flFreezeAmount, float fRadius, int iClusters, const Vector &position, const QAngle &angles, const Vector &velocity, const AngularImpulse &angVelocity, CBaseEntity *pOwner, CBaseEntity *pCreatorWeapon )
|
||||
{
|
||||
CASW_Grenade_Freeze *pGrenade = (CASW_Grenade_Freeze *)CreateEntityByName( "asw_grenade_freeze" );
|
||||
pGrenade->SetAbsAngles( angles );
|
||||
pGrenade->Spawn();
|
||||
pGrenade->m_flDamage = flDamage;
|
||||
pGrenade->m_flFreezeAmount = flFreezeAmount;
|
||||
pGrenade->m_DmgRadius = fRadius;
|
||||
pGrenade->m_hFirer = pOwner;
|
||||
pGrenade->SetOwnerEntity( pOwner );
|
||||
UTIL_SetOrigin( pGrenade, position );
|
||||
pGrenade->SetClusters(iClusters, true);
|
||||
pGrenade->m_hCreatorWeapon.Set( pCreatorWeapon );
|
||||
|
||||
// hack attack! for some reason, grenades refuse to be affect by damage forces until they're actually dead
|
||||
// so we kill it immediately.
|
||||
pGrenade->TakeDamage(CTakeDamageInfo(pGrenade, pGrenade, Vector(0, 0, 1), position, 10, DMG_SLASH));
|
||||
|
||||
pGrenade->SetAbsVelocity( velocity );
|
||||
|
||||
return pGrenade;
|
||||
}
|
||||
|
||||
void CASW_Grenade_Freeze::CreateEffects()
|
||||
{
|
||||
CEffectData data;
|
||||
data.m_vOrigin = GetAbsOrigin();
|
||||
CPASFilter filter( data.m_vOrigin );
|
||||
filter.SetIgnorePredictionCull( true );
|
||||
DispatchParticleEffect( "grenade_freeze_main_trail", PATTACH_ABSORIGIN_FOLLOW, this, "fuse", false, -1, &filter );
|
||||
}
|
||||
Reference in New Issue
Block a user