You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
238 lines
6.0 KiB
238 lines
6.0 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//=============================================================================// |
|
|
|
|
|
#include "cbase.h" |
|
#include "fx.h" |
|
#include "c_te_effect_dispatch.h" |
|
#include "c_te_legacytempents.h" |
|
#include "tempent.h" |
|
#include "c_te_basebeam.h" |
|
#include "iviewrender_beams.h" |
|
#include "c_baseplayer.h" |
|
#include "beam_shared.h" |
|
|
|
|
|
#define GAUSS_GLOW_SPRITE "sprites/hotglow.vmt" |
|
#define GAUSS_BEAM_SPRITE "sprites/smoke.vmt" |
|
|
|
|
|
int m_nGlowIndex; |
|
int m_nBeamIndex; |
|
|
|
|
|
void PrecacheGaussEffects(void *pUser) |
|
{ |
|
m_nGlowIndex = modelinfo->GetModelIndex( GAUSS_GLOW_SPRITE ); |
|
m_nBeamIndex = modelinfo->GetModelIndex( GAUSS_BEAM_SPRITE ); |
|
} |
|
PRECACHE_REGISTER_FN(PrecacheGaussEffects); |
|
|
|
|
|
void HL1GaussBeam( const CEffectData &data ) |
|
{ |
|
// beam expects ent + attach to be encoded in the entity index (legacy system) |
|
int nStartEntity = data.entindex() | ((1 & 0xF)<<12); |
|
|
|
C_BaseEntity * pEnt = cl_entitylist->GetEnt( BEAMENT_ENTITY(nStartEntity) ); |
|
|
|
if ( !pEnt->IsPlayer() ) |
|
return; |
|
|
|
C_BasePlayer * pPlayer = static_cast<C_BasePlayer*>(pEnt); |
|
int nStartAttachment = -1; |
|
|
|
if ( pPlayer->IsLocalPlayer() ) |
|
{ |
|
nStartEntity = pPlayer->GetViewModel()->entindex(); |
|
} |
|
else |
|
{ |
|
if ( !pPlayer->GetActiveWeapon() ) // TODO : make sure we have the gauss gun |
|
return; |
|
|
|
nStartEntity = pPlayer->GetActiveWeapon()->entindex(); |
|
nStartAttachment = 2; |
|
} |
|
|
|
nStartEntity |= ((1 & 0xF)<<12); |
|
|
|
Vector vecEndPoint = data.m_vOrigin; |
|
bool fIsPrimaryFire = data.m_fFlags; |
|
float flStartWidth; |
|
float flEndWidth; |
|
color32 beamColor; |
|
|
|
if ( fIsPrimaryFire ) // primary attack |
|
{ |
|
flStartWidth = 1.0; |
|
flEndWidth = 1.0; |
|
|
|
beamColor.r = 255; |
|
beamColor.g = 255; |
|
beamColor.b = 0; |
|
beamColor.a = 255; |
|
} |
|
else // secondary |
|
{ |
|
flStartWidth = 2.5; |
|
flEndWidth = 2.5; |
|
|
|
beamColor.r = 255; |
|
beamColor.g = 255; |
|
beamColor.b = 255; |
|
beamColor.a = 255; |
|
} |
|
|
|
beams->CreateBeamEntPoint( |
|
nStartEntity, // start ent |
|
NULL, // start pos |
|
0, // end ent |
|
&vecEndPoint, // end pos |
|
m_nBeamIndex, // model index |
|
NULL, // halo index |
|
0.0, // halo scale |
|
0.1, // life |
|
flStartWidth, // startwidth |
|
flEndWidth, // endwidth |
|
0.0, // fade length |
|
0, // amplitude |
|
beamColor.a, // brightness |
|
0, // speed |
|
0, // startframe |
|
0, // framerate |
|
beamColor.r, // R |
|
beamColor.g, // G |
|
beamColor.b // B |
|
); |
|
|
|
//ADRIANHL1MP |
|
} |
|
DECLARE_CLIENT_EFFECT( "HL1GaussBeam", HL1GaussBeam ); |
|
|
|
|
|
void HL1GaussBeamReflect( const CEffectData &data ) |
|
{ |
|
Vector vecStartPoint = data.m_vStart; |
|
Vector vecEndPoint = data.m_vOrigin; |
|
bool fIsPrimaryFire = data.m_fFlags; |
|
float flStartWidth; |
|
float flEndWidth; |
|
color32 beamColor; |
|
|
|
if ( fIsPrimaryFire ) // primary attack |
|
{ |
|
flStartWidth = 1.0; |
|
flEndWidth = 1.0; |
|
|
|
beamColor.r = 255; |
|
beamColor.g = 255; |
|
beamColor.b = 0; |
|
beamColor.a = 255; |
|
} |
|
else // secondary |
|
{ |
|
flStartWidth = 2.5; |
|
flEndWidth = 2.5; |
|
|
|
beamColor.r = 255; |
|
beamColor.g = 255; |
|
beamColor.b = 255; |
|
beamColor.a = 255; |
|
} |
|
|
|
beams->CreateBeamPoints( |
|
vecStartPoint, // start pos |
|
vecEndPoint, // end pos |
|
m_nBeamIndex, // model index |
|
NULL, // halo index |
|
0.0, // halo scale |
|
0.1, // life |
|
flStartWidth, // startwidth |
|
flEndWidth, // endwidth |
|
0.0, // fade length |
|
0, // amplitude |
|
beamColor.a, // brightness |
|
0, // speed |
|
0, // startframe |
|
0, // framerate |
|
beamColor.r, // R |
|
beamColor.g, // G |
|
beamColor.b // B |
|
); |
|
} |
|
DECLARE_CLIENT_EFFECT( "HL1GaussBeamReflect", HL1GaussBeamReflect ); |
|
|
|
|
|
void HL1GaussReflect( const CEffectData &data ) |
|
{ |
|
Vector vecStart = data.m_vOrigin; |
|
Vector vecNormal = data.m_vNormal; |
|
float flMagnitude = data.m_flMagnitude; |
|
|
|
tempents->TempSprite( vecStart, vec3_origin, 0.2, m_nGlowIndex, kRenderGlow, kRenderFxNoDissipation, flMagnitude / 255.0, flMagnitude * 0.05, FTENT_FADEOUT ); |
|
|
|
Vector vecForward; |
|
VectorAdd( vecStart, vecNormal, vecForward ); |
|
|
|
tempents->Sprite_Trail( vecStart, vecForward, m_nGlowIndex, 3, 0.1, random->RandomFloat( 0.1, 0.2 ), 100, 255, 100 ); |
|
} |
|
DECLARE_CLIENT_EFFECT( "HL1GaussReflect", HL1GaussReflect ); |
|
|
|
|
|
void HL1GaussWallPunchEnter( const CEffectData &data ) |
|
{ |
|
Vector vecStart = data.m_vOrigin; |
|
Vector vecNormal = data.m_vNormal; |
|
|
|
Vector vecForward; |
|
VectorSubtract( vecStart, vecNormal, vecForward ); |
|
|
|
tempents->Sprite_Trail( vecStart, vecForward, m_nGlowIndex, 3, 0.1, random->RandomFloat( 0.1, 0.2 ), 100, 255, 100 ); |
|
} |
|
DECLARE_CLIENT_EFFECT( "HL1GaussWallPunchEnter", HL1GaussWallPunchEnter ); |
|
|
|
|
|
void HL1GaussWallPunchExit( const CEffectData &data ) |
|
{ |
|
Vector vecStart = data.m_vOrigin; |
|
Vector vecNormal = data.m_vNormal; |
|
float flMagnitude = data.m_flMagnitude; |
|
|
|
tempents->TempSprite( vecStart, vec3_origin, 0.1, m_nGlowIndex, kRenderGlow, kRenderFxNoDissipation, flMagnitude * 1.2 / 255.0, 6.0, FTENT_FADEOUT ); |
|
|
|
Vector vecForward; |
|
VectorSubtract( vecStart, vecNormal, vecForward ); |
|
|
|
tempents->Sprite_Trail( vecStart, vecForward, m_nGlowIndex, flMagnitude * 0.3, 0.1, random->RandomFloat( 0.1, 0.2 ), 200, 255, 40 ); |
|
} |
|
DECLARE_CLIENT_EFFECT( "HL1GaussWallPunchExit", HL1GaussWallPunchExit ); |
|
|
|
|
|
void HL1GaussWallImpact1( const CEffectData &data ) |
|
{ |
|
Vector vecStart = data.m_vOrigin; |
|
float flMagnitude = data.m_flMagnitude; |
|
|
|
tempents->TempSprite( vecStart, vec3_origin, 1, m_nGlowIndex, kRenderGlow, kRenderFxNoDissipation, flMagnitude / 255.0, 6.0, FTENT_FADEOUT ); |
|
} |
|
DECLARE_CLIENT_EFFECT( "HL1GaussWallImpact1", HL1GaussWallImpact1 ); |
|
|
|
|
|
void HL1GaussWallImpact2( const CEffectData &data ) |
|
{ |
|
Vector vecStart = data.m_vOrigin; |
|
Vector vecNormal = data.m_vNormal; |
|
|
|
tempents->TempSprite( vecStart, vec3_origin, 0.2, m_nGlowIndex, kRenderGlow, kRenderFxNoDissipation, 240.0 / 255.0, 0.3, FTENT_FADEOUT ); |
|
|
|
Vector vecForward; |
|
VectorAdd( vecStart, vecNormal, vecForward ); |
|
|
|
tempents->Sprite_Trail( vecStart, vecForward, m_nGlowIndex, 8, 0.6, random->RandomFloat( 0.1, 0.2 ), 100, 255, 200 ); |
|
} |
|
DECLARE_CLIENT_EFFECT( "HL1GaussWallImpact2", HL1GaussWallImpact2 ); |
|
|
|
|