Files
HL2Overcharged/game/shared/deferred/CDefLightGlobal.cpp
2025-05-21 21:20:08 +03:00

127 lines
3.0 KiB
C++

#include "cbase.h"
#include "deferred/deferred_shared_common.h"
static CDeferredLightGlobal *__g_pGlobalLight = NULL;
CDeferredLightGlobal *GetGlobalLight()
{
return __g_pGlobalLight;
}
#ifdef GAME_DLL
BEGIN_DATADESC( CDeferredLightGlobal )
DEFINE_KEYFIELD( m_str_Diff, FIELD_STRING, "diffuse" ),
DEFINE_KEYFIELD( m_str_Ambient_High, FIELD_STRING, "ambient_high" ),
DEFINE_KEYFIELD( m_str_Ambient_Low, FIELD_STRING, "ambient_low" ),
DEFINE_KEYFIELD( m_flFadeTime, FIELD_FLOAT, "fadetime" ),
DEFINE_FIELD( m_vecColor_Diff, FIELD_VECTOR ),
DEFINE_FIELD( m_vecColor_Ambient_High, FIELD_VECTOR ),
DEFINE_FIELD( m_vecColor_Ambient_Low, FIELD_VECTOR ),
DEFINE_FIELD( m_iDefFlags, FIELD_INTEGER ),
END_DATADESC()
#endif
IMPLEMENT_NETWORKCLASS_DT( CDeferredLightGlobal, CDeferredLightGlobal_DT )
#ifdef GAME_DLL
SendPropVector( SENDINFO( m_vecColor_Diff ), 32 ),
SendPropVector( SENDINFO( m_vecColor_Ambient_High ), 32 ),
SendPropVector( SENDINFO( m_vecColor_Ambient_Low ), 32 ),
SendPropInt( SENDINFO( m_iDefFlags ), DEFLIGHTGLOBAL_FLAGS_MAX_SHARED_BITS, SPROP_UNSIGNED ),
#else
RecvPropVector( RECVINFO( m_vecColor_Diff ) ),
RecvPropVector( RECVINFO( m_vecColor_Ambient_High ) ),
RecvPropVector( RECVINFO( m_vecColor_Ambient_Low ) ),
RecvPropInt( RECVINFO( m_iDefFlags ) ),
#endif
END_NETWORK_TABLE();
LINK_ENTITY_TO_CLASS( light_deferred_global, CDeferredLightGlobal );
CDeferredLightGlobal::CDeferredLightGlobal()
{
Assert( __g_pGlobalLight == NULL );
__g_pGlobalLight = this;
m_iDefFlags = DEFLIGHTGLOBAL_ENABLED | DEFLIGHTGLOBAL_SHADOW_ENABLED;
}
CDeferredLightGlobal::~CDeferredLightGlobal()
{
Assert( __g_pGlobalLight == this );
__g_pGlobalLight = NULL;
}
#ifdef GAME_DLL
void CDeferredLightGlobal::Activate()
{
BaseClass::Activate();
SetSolid( SOLID_NONE );
SetMoveType( MOVETYPE_NONE );
AddEffects( EF_NODRAW );
m_iDefFlags = GetSpawnFlags();
m_vecColor_Diff.GetForModify() = stringColToVec( STRING( m_str_Diff ) );
m_vecColor_Ambient_High.GetForModify() = stringColToVec( STRING( m_str_Ambient_High ) );
m_vecColor_Ambient_Low.GetForModify() = stringColToVec( STRING( m_str_Ambient_Low ) );
}
int CDeferredLightGlobal::UpdateTransmitState()
{
return SetTransmitState( FL_EDICT_ALWAYS );
}
CON_COMMAND( deferred_debug_globalLight_SetAngles, "" )
{
if ( !GetGlobalLight() )
{
Warning( "No global light existing!\n" );
return;
}
if ( args.ArgC() < 4 )
{
Warning( "Not enough parameters!\n" );
return;
}
QAngle ang( atof( args[1] ), atof( args[2] ), atof( args[3] ) );
GetGlobalLight()->SetAbsAngles( ang );
}
#else
lightData_Global_t CDeferredLightGlobal::GetState()
{
lightData_Global_t data;
data.diff.Init( GetColor_Diffuse() );
data.ambh.Init( GetColor_Ambient_High() );
data.ambl.Init( GetColor_Ambient_Low() );
Vector dir;
AngleVectors( GetAbsAngles(), &dir );
data.vecLight.Init( -dir );
if ( IsEnabled() &&
( data.diff.LengthSqr() > 0.01f ||
data.ambh.LengthSqr() > 0.01f ||
data.ambl.LengthSqr() > 0.01f ) )
{
data.bEnabled = true;
data.bShadow = HasShadow();
}
return data;
}
#endif