stvoy-sp-sdk/cgame/FX_avatar.cpp

57 lines
1.8 KiB
C++

// Avatar weapon effects
#include "cg_local.h"
#include "fx_public.h"
#define BEAM_LEN 96.0f
//------------------------------------------------
void FX_ForgePsychThink( centity_t *cent, const struct weaponInfo_s *weapon )
//------------------------------------------------
{
vec3_t normal, end;
FXCylinder *fx;
// Convert the direction of travel in to a normal;
VectorCopy( cent->gent->s.pos.trDelta, normal );
VectorNormalize( normal );
VectorScale( normal, -1, normal );
VectorMA( cent->lerpOrigin, 8, normal, end );
FX_AddSprite( end, NULL, NULL, 64.0f, 0.0f, 0.2f, 0.2f, 0.0f, 0.0f, 2, cgs.media.blueParticleShader );
fx = FX_AddCylinder( cent->lerpOrigin,
normal, BEAM_LEN, 0,
20 + random() * 3, 0,
8 - random() * 3, 0,
0.8f + random() * 0.2, 0.8f,
1,
cgs.media.psychicRingsShader );
if ( fx == NULL )
return;
// Set the texture to wrap around the cylinder
fx->SetFlags( FXF_WRAP | FXF_NO_LOD );
}
//------------------------------------------------
void FX_ForgePsychHitPlayer( vec3_t origin, vec3_t dir )
//------------------------------------------------
{
//Sound
cgi_S_StartSound( origin, ENTITYNUM_WORLD, CHAN_AUTO, cg_weapons[WP_FORGE_PSYCH].missileHitSound );
}
//------------------------------------------------
void FX_ForgePsychHitWall( vec3_t origin, vec3_t dir )
//------------------------------------------------
{
vec3_t rgb={0.5f, 0.1f, 1.0f };
FX_AddQuad( origin, dir, NULL, NULL, 25.0f, 0.0f, 1.0f, 0.0f, 0.0f, 0.0f, 0.0f, 250, cgs.media.blueParticleShader );
FX_AddQuad( origin, dir, NULL, NULL, 25.0f, 32.0f, 1.0f, 0.0f, rgb, rgb, 0.0f, 0.0f, 0.0f, 250, cgs.media.whiteRingShader );
//Sound
cgi_S_StartSound( origin, ENTITYNUM_WORLD, CHAN_AUTO, cg_weapons[WP_FORGE_PSYCH].missileHitSound );
}