mirror of
https://github.com/celisej567/source-engine.git
synced 2026-09-19 20:09:06 +03:00
upload "kind" alien swarm
This commit is contained in:
191
game/shared/swarm/asw_fx_shared.cpp
Normal file
191
game/shared/swarm/asw_fx_shared.cpp
Normal file
@@ -0,0 +1,191 @@
|
||||
#include "cbase.h"
|
||||
#include "mathlib/mathlib.h"
|
||||
#include "util_shared.h"
|
||||
//#include "model_types.h"
|
||||
#include "convar.h"
|
||||
#include "IEffects.h"
|
||||
//#include "vphysics/object_hash.h"
|
||||
//#include "IceKey.H"
|
||||
//#include "checksum_crc.h"
|
||||
#include "asw_fx_shared.h"
|
||||
#include "particle_parse.h"
|
||||
|
||||
#ifdef CLIENT_DLL
|
||||
#include "c_te_effect_dispatch.h"
|
||||
#else
|
||||
#include "te_effect_dispatch.h"
|
||||
#include "Sprite.h"
|
||||
#endif
|
||||
|
||||
|
||||
// memdbgon must be the last include file in a .cpp file!!!
|
||||
#include "tier0/memdbgon.h"
|
||||
|
||||
#ifdef GAME_DLL
|
||||
// link clientside sprite to CSprite - can remove this if we fixup all the maps to not have _clientside ones (do when we're sure we don't need clientside sprites)
|
||||
LINK_ENTITY_TO_CLASS( env_sprite_clientside, CSprite );
|
||||
#endif
|
||||
|
||||
void UTIL_ASW_EggGibs( const Vector &pos, int iFlags, int iEntIndex )
|
||||
{
|
||||
#ifdef GAME_DLL
|
||||
Vector vecOrigin = pos;
|
||||
CPASFilter filter( vecOrigin );
|
||||
UserMessageBegin( filter, "ASWEggEffects" );
|
||||
WRITE_FLOAT( vecOrigin.x );
|
||||
WRITE_FLOAT( vecOrigin.y );
|
||||
WRITE_FLOAT( vecOrigin.z );
|
||||
WRITE_SHORT( iFlags );
|
||||
WRITE_SHORT( iEntIndex );
|
||||
MessageEnd();
|
||||
#endif
|
||||
}
|
||||
|
||||
void UTIL_ASW_BuzzerDeath( const Vector &pos )
|
||||
{
|
||||
#ifdef GAME_DLL
|
||||
Vector vecExplosionPos = pos;
|
||||
CPASFilter filter( vecExplosionPos );
|
||||
UserMessageBegin( filter, "ASWBuzzerDeath" );
|
||||
WRITE_FLOAT( vecExplosionPos.x );
|
||||
WRITE_FLOAT( vecExplosionPos.y );
|
||||
WRITE_FLOAT( vecExplosionPos.z );
|
||||
MessageEnd();
|
||||
#endif
|
||||
}
|
||||
|
||||
void UTIL_ASW_DroneBleed( const Vector &pos, const Vector &dir, int amount )
|
||||
{
|
||||
CEffectData data;
|
||||
|
||||
data.m_vOrigin = pos;
|
||||
data.m_vNormal = dir;
|
||||
//data.m_flScale = (float)amount;
|
||||
|
||||
// todo: use filter?
|
||||
QAngle vecAngles;
|
||||
VectorAngles( data.m_vNormal, vecAngles );
|
||||
DispatchParticleEffect( "drone_shot", data.m_vOrigin, vecAngles );
|
||||
|
||||
//DispatchEffect( "DroneBleed", data );
|
||||
}
|
||||
|
||||
void UTIL_ASW_BloodImpact( const Vector &pos, const Vector &dir, int color, int amount )
|
||||
{
|
||||
CEffectData data;
|
||||
|
||||
data.m_vOrigin = pos;
|
||||
data.m_vNormal = dir;
|
||||
data.m_flScale = (float)amount;
|
||||
data.m_nColor = (unsigned char)color;
|
||||
|
||||
DispatchEffect( "ASWBloodImpact", data );
|
||||
}
|
||||
|
||||
void UTIL_ASW_BloodDrips( const Vector &origin, const Vector &direction, int color, int amount )
|
||||
{
|
||||
if ( !UTIL_ShouldShowBlood( color ) )
|
||||
return;
|
||||
|
||||
if ( color == DONT_BLEED || amount == 0 )
|
||||
return;
|
||||
|
||||
if ( g_Language.GetInt() == LANGUAGE_GERMAN && color == BLOOD_COLOR_RED )
|
||||
color = 0;
|
||||
|
||||
if ( amount > 255 )
|
||||
amount = 255;
|
||||
|
||||
if (color == BLOOD_COLOR_MECH)
|
||||
{
|
||||
g_pEffects->Sparks(origin);
|
||||
if (random->RandomFloat(0, 2) >= 1)
|
||||
{
|
||||
UTIL_Smoke(origin, random->RandomInt(10, 15), 10);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
// Normal blood impact
|
||||
//UTIL_ASW_BloodImpact( origin, direction, color, amount );
|
||||
QAngle vecAngles;
|
||||
VectorAngles( direction, vecAngles );
|
||||
if ( amount < 4 )
|
||||
DispatchParticleEffect( "marine_bloodsplat_light", origin, vecAngles );
|
||||
else
|
||||
DispatchParticleEffect( "marine_bloodsplat_heavy", origin, vecAngles );
|
||||
}
|
||||
}
|
||||
|
||||
void UTIL_ASW_MarineTakeDamage( const Vector &origin, const Vector &direction, int color, int amount, CASW_Marine *pMarine, bool bFriendly )
|
||||
{
|
||||
if ( !UTIL_ShouldShowBlood( color ) )
|
||||
return;
|
||||
|
||||
if ( color == DONT_BLEED || amount == 0 )
|
||||
return;
|
||||
|
||||
if ( g_Language.GetInt() == LANGUAGE_GERMAN && color == BLOOD_COLOR_RED )
|
||||
color = 0;
|
||||
|
||||
if ( amount > 255 )
|
||||
amount = 255;
|
||||
|
||||
// TODO: use amount to determine large versus small attacks taken?
|
||||
QAngle vecAngles;
|
||||
VectorAngles( -direction, vecAngles );
|
||||
Vector vecForward, vecRight, vecUp;
|
||||
AngleVectors( vecAngles, &vecForward, &vecRight, &vecUp );
|
||||
|
||||
#ifdef CLIENT_DLL
|
||||
const char *pchEffectName = NULL;
|
||||
if ( bFriendly )
|
||||
pchEffectName = "marine_hit_blood_ff";
|
||||
else
|
||||
pchEffectName = "marine_hit_blood";
|
||||
|
||||
CUtlReference< CNewParticleEffect > pEffect;
|
||||
pEffect = pMarine->ParticleProp()->Create( pchEffectName, PATTACH_CUSTOMORIGIN );
|
||||
|
||||
if ( pEffect )
|
||||
{
|
||||
pMarine->ParticleProp()->AddControlPoint( pEffect, 2, pMarine, PATTACH_ABSORIGIN_FOLLOW );
|
||||
pEffect->SetControlPoint( 0, origin );//origin - pMarine->GetAbsOrigin()
|
||||
pEffect->SetControlPointOrientation( 0, vecForward, vecRight, vecUp );
|
||||
}
|
||||
else
|
||||
{
|
||||
Warning( "Could not create effect for marine hurt: %s", pchEffectName );
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void UTIL_ASW_GrenadeExplosion( const Vector &vecPos, float flRadius )
|
||||
{
|
||||
#ifdef GAME_DLL
|
||||
Vector vecExplosionPos = vecPos;
|
||||
CPASFilter filter( vecExplosionPos );
|
||||
UserMessageBegin( filter, "ASWGrenadeExplosion" );
|
||||
WRITE_FLOAT( vecExplosionPos.x );
|
||||
WRITE_FLOAT( vecExplosionPos.y );
|
||||
WRITE_FLOAT( vecExplosionPos.z );
|
||||
WRITE_FLOAT( flRadius );
|
||||
MessageEnd();
|
||||
#endif
|
||||
}
|
||||
|
||||
void UTIL_ASW_EnvExplosionFX( const Vector &vecPos, float flRadius, bool bOnGround )
|
||||
{
|
||||
#ifdef GAME_DLL
|
||||
Vector vecExplosionPos = vecPos;
|
||||
CPASFilter filter( vecExplosionPos );
|
||||
UserMessageBegin( filter, "ASWEnvExplosionFX" );
|
||||
WRITE_FLOAT( vecExplosionPos.x );
|
||||
WRITE_FLOAT( vecExplosionPos.y );
|
||||
WRITE_FLOAT( vecExplosionPos.z );
|
||||
WRITE_FLOAT( flRadius );
|
||||
WRITE_BOOL( bOnGround );
|
||||
//damage.bFriendlyFire = msg.ReadOneBit() ? true : false;
|
||||
MessageEnd();
|
||||
#endif
|
||||
}
|
||||
Reference in New Issue
Block a user