Modified source engine (2017) developed by valve and leaked in 2020. Not for commercial purporses
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.
 
 
 
 
 
 

158 lines
4.4 KiB

//========= Copyright © 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#include "cbase.h"
#include "dlight.h"
#include "iefx.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
//##################################################################
//
// PlasmaBeamNode - generates plasma embers
//
//##################################################################
class C_SpotlightEnd : public C_BaseEntity
{
public:
DECLARE_CLASS( C_SpotlightEnd, C_BaseEntity );
DECLARE_CLIENTCLASS();
DECLARE_INTERPOLATION();
C_SpotlightEnd();
public:
void OnDataChanged(DataUpdateType_t updateType);
bool ShouldDraw();
void ClientThink( void );
virtual bool ShouldInterpolate();
// Vector m_vSpotlightOrg;
// Vector m_vSpotlightDir;
float m_flLightScale;
float m_Radius;
private:
dlight_t* m_pDynamicLight;
//dlight_t* m_pModelLight;
};
//------------------------------------------------------------------------------
// Purpose :
// Input :
// Output :
//------------------------------------------------------------------------------
C_SpotlightEnd::C_SpotlightEnd(void) : /*m_pModelLight(0), */m_pDynamicLight(0)
{
m_flLightScale = 100;
}
//------------------------------------------------------------------------------
// Purpose :
// Input :
// Output :
//------------------------------------------------------------------------------
void C_SpotlightEnd::OnDataChanged(DataUpdateType_t updateType)
{
if ( updateType == DATA_UPDATE_CREATED )
{
SetNextClientThink(CLIENT_THINK_ALWAYS);
}
}
//------------------------------------------------------------------------------
// Purpose :
// Input :
// Output :
//------------------------------------------------------------------------------
bool C_SpotlightEnd::ShouldDraw()
{
return false;
}
//-----------------------------------------------------------------------------
// Purpose: YWB: This is a hack, BaseClass::Interpolate skips this entity because model == NULL
// We could do something like model = (model_t *)0x00000001, but that's probably more evil.
// Input : currentTime -
// Output : Returns true on success, false on failure.
//-----------------------------------------------------------------------------
bool C_SpotlightEnd::ShouldInterpolate()
{
return true;
}
//------------------------------------------------------------------------------
// Purpose :
// Input :
// Output :
//------------------------------------------------------------------------------
void C_SpotlightEnd::ClientThink(void)
{
// If light scale is zero, don't draw light
if ( m_flLightScale <= 0 )
return;
color24 c = GetRenderColor();
float a = GetRenderAlpha() / 255.0f;
ColorRGBExp32 color;
color.r = c.r * a;
color.g = c.g * a;
color.b = c.b * a;
color.exponent = 0;
if ( color.r == 0 && color.g == 0 && color.b == 0 )
return;
// Deal with the environment light
if ( !m_pDynamicLight || (m_pDynamicLight->key != index) )
{
m_pDynamicLight = effects->CL_AllocDlight( index );
assert (m_pDynamicLight);
}
//m_pDynamicLight->flags = DLIGHT_NO_MODEL_ILLUMINATION;
m_pDynamicLight->radius = m_flLightScale*3.0f;
m_pDynamicLight->origin = GetAbsOrigin() + Vector(0,0,5);
m_pDynamicLight->die = gpGlobals->curtime + 0.05f;
m_pDynamicLight->color = color;
/*
// For bumped lighting
VectorCopy (m_vSpotlightDir, m_pDynamicLight->m_Direction);
// Deal with the model light
if ( !m_pModelLight || (m_pModelLight->key != -index) )
{
m_pModelLight = effects->CL_AllocDlight( -index );
assert (m_pModelLight);
}
m_pModelLight->radius = m_Radius;
m_pModelLight->flags = DLIGHT_NO_WORLD_ILLUMINATION;
m_pModelLight->color.r = c.r * c.a;
m_pModelLight->color.g = c.g * c.a;
m_pModelLight->color.b = c.b * c.a;
m_pModelLight->color.exponent = 1;
m_pModelLight->origin = m_vSpotlightOrg;
m_pModelLight->m_InnerAngle = 6;
m_pModelLight->m_OuterAngle = 8;
m_pModelLight->die = gpGlobals->curtime + 0.05;
VectorCopy( m_vSpotlightDir, m_pModelLight->m_Direction );
*/
SetNextClientThink( CLIENT_THINK_ALWAYS );
}
IMPLEMENT_CLIENTCLASS_DT(C_SpotlightEnd, DT_SpotlightEnd, CSpotlightEnd)
RecvPropFloat (RECVINFO(m_flLightScale)),
RecvPropFloat (RECVINFO(m_Radius)),
// RecvPropVector (RECVINFO(m_vSpotlightOrg)),
// RecvPropVector (RECVINFO(m_vSpotlightDir)),
END_RECV_TABLE()