mirror of
https://github.com/celisej567/source-engine.git
synced 2026-01-04 18:09:53 +03:00
add hl1,portal,dod source code
This commit is contained in:
121
game/server/dod/dod_smokegrenade.cpp
Normal file
121
game/server/dod/dod_smokegrenade.cpp
Normal file
@@ -0,0 +1,121 @@
|
||||
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||||
//
|
||||
// Purpose:
|
||||
//
|
||||
//=============================================================================//
|
||||
|
||||
#include "cbase.h"
|
||||
#include "dod_smokegrenade.h"
|
||||
#include "particle_parse.h"
|
||||
|
||||
LINK_ENTITY_TO_CLASS( grenade_smoke, CDODSmokeGrenade );
|
||||
PRECACHE_WEAPON_REGISTER( grenade_smoke );
|
||||
|
||||
BEGIN_DATADESC( CDODSmokeGrenade )
|
||||
DEFINE_THINKFUNC( Think_Emit ),
|
||||
DEFINE_THINKFUNC( Think_Fade ),
|
||||
DEFINE_THINKFUNC( Think_Remove )
|
||||
END_DATADESC()
|
||||
|
||||
IMPLEMENT_SERVERCLASS_ST( CDODSmokeGrenade, DT_DODSmokeGrenade )
|
||||
SendPropTime(SENDINFO(m_flSmokeSpawnTime) ),
|
||||
END_SEND_TABLE()
|
||||
|
||||
void CDODSmokeGrenade::Spawn()
|
||||
{
|
||||
BaseClass::Spawn();
|
||||
|
||||
SetThink( &CDODSmokeGrenade::Think_Emit );
|
||||
SetNextThink( gpGlobals->curtime + 0.5 );
|
||||
|
||||
m_bInitialSmoke = false;
|
||||
m_flRemoveTime = -1;
|
||||
m_flSmokeSpawnTime = 0;
|
||||
}
|
||||
|
||||
void CDODSmokeGrenade::Precache()
|
||||
{
|
||||
PrecacheScriptSound( "SmokeGrenade.Bounce" );
|
||||
PrecacheParticleSystem( "smokegrenade" );
|
||||
PrecacheParticleSystem( "smokegrenade_jet" );
|
||||
BaseClass::Precache();
|
||||
}
|
||||
|
||||
void CDODSmokeGrenade::BounceSound( void )
|
||||
{
|
||||
EmitSound( "SmokeGrenade.Bounce" );
|
||||
}
|
||||
|
||||
void CDODSmokeGrenade::Think_Emit( void )
|
||||
{
|
||||
// if we're stationary and have not yet created smoke, do so now
|
||||
Vector vel;
|
||||
AngularImpulse a;
|
||||
VPhysicsGetObject()->GetVelocity( &vel, &a );
|
||||
|
||||
if ( vel.Length() < 15.0 && !m_bInitialSmoke )
|
||||
{
|
||||
VPhysicsGetObject()->EnableMotion( false );
|
||||
|
||||
// Smoke Cloud
|
||||
DispatchParticleEffect( "smokegrenade", GetAbsOrigin(), vec3_angle );
|
||||
|
||||
// Smoke Jet
|
||||
DispatchParticleEffect( "smokegrenade_jet", PATTACH_POINT, this, "jet" );
|
||||
|
||||
EmitSound( "BaseSmokeEffect.Sound" );
|
||||
|
||||
m_flRemoveTime = gpGlobals->curtime + 10;
|
||||
|
||||
m_bInitialSmoke = true;
|
||||
|
||||
m_flSmokeSpawnTime = gpGlobals->curtime;
|
||||
}
|
||||
|
||||
// if its past our bedtime, fade out
|
||||
if ( m_flRemoveTime > 0 && gpGlobals->curtime > m_flRemoveTime )
|
||||
{
|
||||
m_nRenderMode = kRenderTransColor;
|
||||
SetThink( &CDODSmokeGrenade::Think_Fade );
|
||||
}
|
||||
|
||||
SetNextThink( gpGlobals->curtime + 0.1 );
|
||||
}
|
||||
|
||||
// Fade the projectile out over time before making it disappear
|
||||
void CDODSmokeGrenade::Think_Fade()
|
||||
{
|
||||
m_bFading = true;
|
||||
|
||||
SetNextThink( gpGlobals->curtime );
|
||||
|
||||
color32 c = GetRenderColor();
|
||||
c.a -= 1;
|
||||
SetRenderColor( c.r, c.b, c.g, c.a );
|
||||
|
||||
if ( !c.a )
|
||||
{
|
||||
SetModelName( NULL_STRING );//invisible
|
||||
SetNextThink( gpGlobals->curtime + 10 );
|
||||
SetThink( &CDODSmokeGrenade::Think_Remove ); // Spit out smoke for 10 seconds.
|
||||
SetSolid( SOLID_NONE );
|
||||
}
|
||||
}
|
||||
|
||||
void CDODSmokeGrenade::Think_Remove()
|
||||
{
|
||||
// stop all effects
|
||||
StopParticleEffects( this );
|
||||
|
||||
SetModelName( NULL_STRING );//invisible
|
||||
SetSolid( SOLID_NONE );
|
||||
SetMoveType( MOVETYPE_NONE );
|
||||
|
||||
UTIL_Remove( this );
|
||||
}
|
||||
|
||||
|
||||
void CDODSmokeGrenade::Detonate( void )
|
||||
{
|
||||
// Intentionally blank - our detonate does nothing
|
||||
}
|
||||
Reference in New Issue
Block a user