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.
239 lines
6.0 KiB
239 lines
6.0 KiB
![]()
2 years ago
|
//========= 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 );
|
||
|
|