From b9fd6621390751d48bd04b17760f13d928152381 Mon Sep 17 00:00:00 2001 From: celisej567 Date: Mon, 5 Sep 2022 21:50:20 +0300 Subject: [PATCH] 1 --- sp/src/game/client/c_env_cascade_light.cpp | 147 ++++++++++++++++-- sp/src/game/client/c_env_projectedtexture.cpp | 2 +- sp/src/game/client/clientshadowmgr.cpp | 6 - sp/src/game/server/env_cascade_light.cpp | 88 +++++++---- sp/src/vgui2/vgui_controls/Debug/vc120.pdb | Bin 3928064 -> 4100096 bytes 5 files changed, 200 insertions(+), 43 deletions(-) diff --git a/sp/src/game/client/c_env_cascade_light.cpp b/sp/src/game/client/c_env_cascade_light.cpp index 616f674b..ce12c254 100644 --- a/sp/src/game/client/c_env_cascade_light.cpp +++ b/sp/src/game/client/c_env_cascade_light.cpp @@ -96,6 +96,15 @@ private: ClientShadowHandle_t m_LightHandle; EHANDLE m_hTargetEntity; + color32 m_LightColor; + +#ifdef MAPBASE + float m_flBrightnessScale; + float m_flCurrentBrightnessScale; +#endif + Vector m_CurrentLinearFloatLightColor; + float m_flCurrentLinearFloatLightAlpha; + float m_flColorTransitionTime; void updatePos(); CBaseEntity* pEntity = NULL; @@ -121,6 +130,7 @@ IMPLEMENT_CLIENTCLASS_DT(C_EnvCascadeLight, DT_EnvCascadeLight, CEnvCascadeLight RecvPropFloat( RECVINFO( m_flLightFOV ) ), RecvPropBool( RECVINFO( m_bEnableShadows ) ), RecvPropBool( RECVINFO( m_bLightOnlyTarget ) ), + RecvPropInt(RECVINFO(m_LightColor), 0, RecvProxy_IntToColor32), //i have fukin lighting RecvPropBool( RECVINFO( m_bLightWorld ) ), RecvPropBool( RECVINFO( m_bCameraSpace ) ), RecvPropVector( RECVINFO( m_LinearFloatLightColor ) ), @@ -134,7 +144,6 @@ END_RECV_TABLE() C_EnvCascadeLight::C_EnvCascadeLight( void ) { - m_LightHandle = CLIENTSHADOW_INVALID_HANDLE; } @@ -158,7 +167,7 @@ void C_EnvCascadeLight::updatePos() { if (firstUpdate) { - m_flNearZ = 4000; + m_flNearZ = 5000; m_flFarZ = 16000; } } @@ -170,10 +179,11 @@ void C_EnvCascadeLight::updatePos() void C_EnvCascadeLight::OnDataChanged( DataUpdateType_t updateType ) { UpdateLight( true ); + BaseClass::OnDataChanged( updateType ); } - +ConVar csm_intensity("csm_intensity","1"); void C_EnvCascadeLight::UpdateLight( bool bForceUpdate ) { @@ -237,6 +247,46 @@ void C_EnvCascadeLight::UpdateLight( bool bForceUpdate ) } + Vector vLinearFloatLightColor(m_LightColor.r, m_LightColor.g, m_LightColor.b); + float flLinearFloatLightAlpha = m_LightColor.a; + +#ifdef MAPBASE + if (m_CurrentLinearFloatLightColor != vLinearFloatLightColor || m_flCurrentLinearFloatLightAlpha != flLinearFloatLightAlpha) + { + if (m_flColorTransitionTime != 0.0f) + { + float flColorTransitionSpeed = gpGlobals->frametime * m_flColorTransitionTime * 255.0f; + + m_CurrentLinearFloatLightColor.x = Approach(vLinearFloatLightColor.x, m_CurrentLinearFloatLightColor.x, flColorTransitionSpeed); + m_CurrentLinearFloatLightColor.y = Approach(vLinearFloatLightColor.y, m_CurrentLinearFloatLightColor.y, flColorTransitionSpeed); + m_CurrentLinearFloatLightColor.z = Approach(vLinearFloatLightColor.z, m_CurrentLinearFloatLightColor.z, flColorTransitionSpeed); + m_flCurrentLinearFloatLightAlpha = Approach(flLinearFloatLightAlpha, m_flCurrentLinearFloatLightAlpha, flColorTransitionSpeed); + //m_flCurrentBrightnessScale = Approach(m_flBrightnessScale, m_flCurrentBrightnessScale, flColorTransitionSpeed); + } + else + { + // Just do it instantly + m_CurrentLinearFloatLightColor.x = vLinearFloatLightColor.x; + m_CurrentLinearFloatLightColor.y = vLinearFloatLightColor.y; + m_CurrentLinearFloatLightColor.z = vLinearFloatLightColor.z; + m_flCurrentLinearFloatLightAlpha = flLinearFloatLightAlpha; + //m_flCurrentBrightnessScale = m_flBrightnessScale; + } + } +#else + if (m_CurrentLinearFloatLightColor != vLinearFloatLightColor || m_flCurrentLinearFloatLightAlpha != flLinearFloatLightAlpha) + { + float flColorTransitionSpeed = gpGlobals->frametime * m_flColorTransitionTime * 255.0f; + + m_CurrentLinearFloatLightColor.x = Approach(vLinearFloatLightColor.x, m_CurrentLinearFloatLightColor.x, flColorTransitionSpeed); + m_CurrentLinearFloatLightColor.y = Approach(vLinearFloatLightColor.y, m_CurrentLinearFloatLightColor.y, flColorTransitionSpeed); + m_CurrentLinearFloatLightColor.z = Approach(vLinearFloatLightColor.z, m_CurrentLinearFloatLightColor.z, flColorTransitionSpeed); + m_flCurrentLinearFloatLightAlpha = Approach(flLinearFloatLightAlpha, m_flCurrentLinearFloatLightAlpha, flColorTransitionSpeed); + } +#endif + + + state.m_fHorizontalFOVDegrees = m_flLightFOV; state.m_fVerticalFOVDegrees = m_flLightFOV; @@ -246,12 +296,23 @@ void C_EnvCascadeLight::UpdateLight( bool bForceUpdate ) state.m_fQuadraticAtten = 0.0; state.m_fLinearAtten = 100; state.m_fConstantAtten = 0.0f; - state.m_Color[0] = m_LinearFloatLightColor.x; - state.m_Color[1] = m_LinearFloatLightColor.y; - state.m_Color[2] = m_LinearFloatLightColor.z; + //state.m_Color[0] = m_LinearFloatLightColor.x; + //state.m_Color[1] = m_LinearFloatLightColor.y; + //state.m_Color[2] = m_LinearFloatLightColor.z; + +#ifdef MAPBASE + float flAlpha = m_flCurrentLinearFloatLightAlpha * (1.0f / 255.0f); + state.m_Color[0] = (m_CurrentLinearFloatLightColor.x * (1.0f / 255.0f) * flAlpha) * csm_intensity.GetFloat(); + state.m_Color[1] = (m_CurrentLinearFloatLightColor.y * (1.0f / 255.0f) * flAlpha) * csm_intensity.GetFloat(); + state.m_Color[2] = (m_CurrentLinearFloatLightColor.z * (1.0f / 255.0f) * flAlpha) * csm_intensity.GetFloat(); +#else + state.m_Color[0] = m_CurrentLinearFloatLightColor.x * (1.0f / 255.0f) * csm_intensity.GetFloat(); + state.m_Color[1] = m_CurrentLinearFloatLightColor.y * (1.0f / 255.0f) * csm_intensity.GetFloat(); + state.m_Color[2] = m_CurrentLinearFloatLightColor.z * (1.0f / 255.0f) * csm_intensity.GetFloat(); +#endif + state.m_Color[3] = m_flAmbient; // fixme: need to make ambient work m_flAmbient; state.m_NearZ = m_flNearZ; - state.m_FarZ = m_flFarZ; state.m_flShadowSlopeScaleDepthBias = mat_slopescaledepthbias_shadowmap.GetFloat(); state.m_flShadowDepthBias = mat_depthbias_shadowmap.GetFloat(); @@ -342,6 +403,16 @@ private: ClientShadowHandle_t m_LightHandle; + color32 m_LightColor; + +#ifdef MAPBASE + float m_flBrightnessScale; + float m_flCurrentBrightnessScale; +#endif + Vector m_CurrentLinearFloatLightColor; + float m_flCurrentLinearFloatLightAlpha; + float m_flColorTransitionTime; + EHANDLE m_hTargetEntity; CBaseEntity* pEntity = NULL; bool firstUpdate = true; @@ -361,6 +432,7 @@ private: }; IMPLEMENT_CLIENTCLASS_DT(C_EnvCascadeLightSecond, DT_EnvCascadeLightSecond, CEnvCascadeLightSecond) +RecvPropInt(RECVINFO(m_LightColor), 0, RecvProxy_IntToColor32), RecvPropEHandle(RECVINFO(m_hTargetEntity)), RecvPropBool(RECVINFO(m_bState)), RecvPropFloat(RECVINFO(m_flLightFOV)), @@ -463,6 +535,45 @@ void C_EnvCascadeLightSecond::UpdateLight(bool bForceUpdate) AngleVectors(GetAbsAngles(), &vForward, &vRight, &vUp); } + Vector vLinearFloatLightColor(m_LightColor.r, m_LightColor.g, m_LightColor.b); + float flLinearFloatLightAlpha = m_LightColor.a; + +#ifdef MAPBASE + if (m_CurrentLinearFloatLightColor != vLinearFloatLightColor || m_flCurrentLinearFloatLightAlpha != flLinearFloatLightAlpha) + { + if (m_flColorTransitionTime != 0.0f) + { + float flColorTransitionSpeed = gpGlobals->frametime * m_flColorTransitionTime * 255.0f; + + m_CurrentLinearFloatLightColor.x = Approach(vLinearFloatLightColor.x, m_CurrentLinearFloatLightColor.x, flColorTransitionSpeed); + m_CurrentLinearFloatLightColor.y = Approach(vLinearFloatLightColor.y, m_CurrentLinearFloatLightColor.y, flColorTransitionSpeed); + m_CurrentLinearFloatLightColor.z = Approach(vLinearFloatLightColor.z, m_CurrentLinearFloatLightColor.z, flColorTransitionSpeed); + m_flCurrentLinearFloatLightAlpha = Approach(flLinearFloatLightAlpha, m_flCurrentLinearFloatLightAlpha, flColorTransitionSpeed); + //m_flCurrentBrightnessScale = Approach(m_flBrightnessScale, m_flCurrentBrightnessScale, flColorTransitionSpeed); + } + else + { + // Just do it instantly + m_CurrentLinearFloatLightColor.x = vLinearFloatLightColor.x; + m_CurrentLinearFloatLightColor.y = vLinearFloatLightColor.y; + m_CurrentLinearFloatLightColor.z = vLinearFloatLightColor.z; + m_flCurrentLinearFloatLightAlpha = flLinearFloatLightAlpha; + //m_flCurrentBrightnessScale = m_flBrightnessScale; + } + } +#else + if (m_CurrentLinearFloatLightColor != vLinearFloatLightColor || m_flCurrentLinearFloatLightAlpha != flLinearFloatLightAlpha) + { + float flColorTransitionSpeed = gpGlobals->frametime * m_flColorTransitionTime * 255.0f; + + m_CurrentLinearFloatLightColor.x = Approach(vLinearFloatLightColor.x, m_CurrentLinearFloatLightColor.x, flColorTransitionSpeed); + m_CurrentLinearFloatLightColor.y = Approach(vLinearFloatLightColor.y, m_CurrentLinearFloatLightColor.y, flColorTransitionSpeed); + m_CurrentLinearFloatLightColor.z = Approach(vLinearFloatLightColor.z, m_CurrentLinearFloatLightColor.z, flColorTransitionSpeed); + m_flCurrentLinearFloatLightAlpha = Approach(flLinearFloatLightAlpha, m_flCurrentLinearFloatLightAlpha, flColorTransitionSpeed); + } +#endif + + state.m_fHorizontalFOVDegrees = m_flLightFOV; state.m_fVerticalFOVDegrees = m_flLightFOV; @@ -473,10 +584,24 @@ void C_EnvCascadeLightSecond::UpdateLight(bool bForceUpdate) state.m_fQuadraticAtten = 0.0; state.m_fLinearAtten = 100; state.m_fConstantAtten = 0.0f; - state.m_Color[0] = m_LinearFloatLightColor.x; - state.m_Color[1] = m_LinearFloatLightColor.y; - state.m_Color[2] = m_LinearFloatLightColor.z; + //state.m_Color[0] = m_LinearFloatLightColor.x; + //state.m_Color[1] = m_LinearFloatLightColor.y; + //state.m_Color[2] = m_LinearFloatLightColor.z; + +#ifdef MAPBASE + float flAlpha = m_flCurrentLinearFloatLightAlpha * (1.0f / 255.0f); + state.m_Color[0] = (m_CurrentLinearFloatLightColor.x * (1.0f / 255.0f) * flAlpha) * ConVarRef("csm_second_intensity").GetFloat(); + state.m_Color[1] = (m_CurrentLinearFloatLightColor.y * (1.0f / 255.0f) * flAlpha) * ConVarRef("csm_second_intensity").GetFloat(); + state.m_Color[2] = (m_CurrentLinearFloatLightColor.z * (1.0f / 255.0f) * flAlpha) * ConVarRef("csm_second_intensity").GetFloat(); +#else + state.m_Color[0] = m_CurrentLinearFloatLightColor.x * (1.0f / 255.0f) * ConVarRef("csm_second_intensity").GetFloat(); + state.m_Color[1] = m_CurrentLinearFloatLightColor.y * (1.0f / 255.0f) * ConVarRef("csm_second_intensity").GetFloat(); + state.m_Color[2] = m_CurrentLinearFloatLightColor.z * (1.0f / 255.0f) * ConVarRef("csm_second_intensity").GetFloat(); +#endif + state.m_Color[3] = 0.0f; // fixme: need to make ambient work m_flAmbient; + m_flNearZ = 5000; + m_flFarZ = 16000; state.m_NearZ = m_flNearZ; state.m_FarZ = m_flFarZ; state.m_flShadowSlopeScaleDepthBias = mat_slopescaledepthbias_shadowmap.GetFloat(); @@ -547,6 +672,8 @@ void C_EnvCascadeLightSecond::UpdateLight(bool bForceUpdate) //mat_depthbias_shadowmap.SetValue("0.00001"); scissor.SetValue("0"); + + } diff --git a/sp/src/game/client/c_env_projectedtexture.cpp b/sp/src/game/client/c_env_projectedtexture.cpp index ff70b42f..7f9ec6ae 100644 --- a/sp/src/game/client/c_env_projectedtexture.cpp +++ b/sp/src/game/client/c_env_projectedtexture.cpp @@ -639,7 +639,7 @@ void C_EnvProjectedTexture::UpdateLight() { #endif Vector vForward, vRight, vUp, vPos = GetAbsOrigin(); - FlashlightState_t state; + FlashlightState_t state; state.m_flShadowFilterSize = mat_ptfilter.GetFloat(); if ( m_hTargetEntity != NULL ) diff --git a/sp/src/game/client/clientshadowmgr.cpp b/sp/src/game/client/clientshadowmgr.cpp index 3f0ebd5f..50bc6a16 100644 --- a/sp/src/game/client/clientshadowmgr.cpp +++ b/sp/src/game/client/clientshadowmgr.cpp @@ -1396,13 +1396,7 @@ bool CClientShadowMgr::Init() SetShadowBlobbyCutoffArea( 0.005 ); -#ifndef MAPBASE - bool bTools = CommandLine()->CheckParm( "-tools" ) != NULL; - m_nMaxDepthTextureShadows = bTools ? 4 : 1; // Just one shadow depth texture in games, more in tools -#else - // 5 lets mappers use up to 4 shadow-casting projected textures, which is better than 3. m_nMaxDepthTextureShadows = pr_max.GetInt(); -#endif bool bLowEnd = ( g_pMaterialSystemHardwareConfig->GetDXSupportLevel() < 80 ); diff --git a/sp/src/game/server/env_cascade_light.cpp b/sp/src/game/server/env_cascade_light.cpp index 27b41025..135d394e 100644 --- a/sp/src/game/server/env_cascade_light.cpp +++ b/sp/src/game/server/env_cascade_light.cpp @@ -105,8 +105,10 @@ public: CNetworkHandle(CBaseEntity, m_hTargetEntity); CNetworkVector(m_LinearFloatLightColor); + CNetworkColor32(m_LightColor); private: + CNetworkVar(bool, m_bState); CNetworkVar(float, m_flLightFOV); CNetworkVar(bool, m_bEnableShadows); @@ -142,6 +144,7 @@ DEFINE_THINKFUNC(InitialThink), END_DATADESC() IMPLEMENT_SERVERCLASS_ST(CEnvCascadeLightSecond, DT_EnvCascadeLightSecond) +SendPropInt(SENDINFO(m_LightColor), 32, SPROP_UNSIGNED, SendProxy_Color32ToInt), SendPropEHandle(SENDINFO(m_hTargetEntity)), SendPropBool(SENDINFO(m_bState)), SendPropFloat(SENDINFO(m_flLightFOV)), @@ -163,6 +166,11 @@ END_SEND_TABLE() //----------------------------------------------------------------------------- CEnvCascadeLightSecond::CEnvCascadeLightSecond(void) { +#ifdef MAPBASE + m_LightColor.Init(255, 255, 255, 255); +#else + m_LightColor.Init(255, 255, 255, 1); +#endif m_bState = true; m_flLightFOV = 45.0f; m_bEnableShadows = true; @@ -262,12 +270,15 @@ public: void InputSetSpotlightTexture(inputdata_t& inputdata); void InputSetAmbient(inputdata_t& inputdata); + void InputSetAngles(inputdata_t& inputdata); void InitialThink(void); CNetworkHandle(CBaseEntity, m_hTargetEntity); private: + CNetworkColor32(m_LightColor); CLightOrigin* pEnv; + CEnvCascadeLightSecond* SecondCSM; CNetworkVar(bool, m_bState); CNetworkVar(float, m_flLightFOV); CNetworkVar(bool, EnableAngleFromEnv); @@ -282,6 +293,7 @@ private: CNetworkVar(float, m_flNearZ); CNetworkVar(float, m_flFarZ); CNetworkVar(int, m_nShadowQuality); + }; LINK_ENTITY_TO_CLASS(env_cascade_light, CEnvCascadeLight); @@ -302,31 +314,37 @@ DEFINE_KEYFIELD(m_nShadowQuality, FIELD_INTEGER, "shadowquality"), DEFINE_FIELD(m_LinearFloatLightColor, FIELD_VECTOR), DEFINE_KEYFIELD(EnableAngleFromEnv, FIELD_BOOLEAN, "uselightenvangles"), -DEFINE_INPUTFUNC(FIELD_VOID, "TurnOn", InputTurnOn), -DEFINE_INPUTFUNC(FIELD_VOID, "TurnOff", InputTurnOff), +DEFINE_INPUTFUNC(FIELD_VOID, "Enable", InputTurnOn), +DEFINE_INPUTFUNC(FIELD_VOID, "Disable", InputTurnOff), DEFINE_INPUTFUNC(FIELD_BOOLEAN, "EnableShadows", InputSetEnableShadows), // this is broken . . need to be able to set color and intensity like light_dynamic // DEFINE_INPUTFUNC( FIELD_COLOR32, "LightColor", InputSetLightColor ), + +DEFINE_INPUTFUNC(FIELD_COLOR32, "LightColor", InputSetLightColor), DEFINE_INPUTFUNC(FIELD_FLOAT, "Ambient", InputSetAmbient), -DEFINE_INPUTFUNC(FIELD_STRING, "SpotlightTexture", InputSetSpotlightTexture), +DEFINE_INPUTFUNC(FIELD_STRING, "Texture", InputSetSpotlightTexture), +DEFINE_INPUTFUNC(FIELD_STRING, "SetAngles", InputSetAngles), DEFINE_THINKFUNC(InitialThink), END_DATADESC() IMPLEMENT_SERVERCLASS_ST(CEnvCascadeLight, DT_EnvCascadeLight) -SendPropEHandle(SENDINFO(m_hTargetEntity)), -SendPropBool(SENDINFO(m_bState)), -SendPropFloat(SENDINFO(m_flLightFOV)), -SendPropBool(SENDINFO(m_bEnableShadows)), -SendPropBool(SENDINFO(m_bLightOnlyTarget)), -SendPropBool(SENDINFO(m_bLightWorld)), -SendPropBool(SENDINFO(m_bCameraSpace)), -SendPropVector(SENDINFO(m_LinearFloatLightColor)), -SendPropFloat(SENDINFO(m_flAmbient)), -SendPropString(SENDINFO(m_SpotlightTextureName)), -SendPropInt(SENDINFO(m_nSpotlightTextureFrame)), -SendPropFloat(SENDINFO(m_flNearZ), 16, SPROP_ROUNDDOWN, 0.0f, 500.0f), -SendPropFloat(SENDINFO(m_flFarZ), 18, SPROP_ROUNDDOWN, 0.0f, 1500.0f), -SendPropInt(SENDINFO(m_nShadowQuality), 1, SPROP_UNSIGNED) // Just one bit for now + + SendPropInt(SENDINFO(m_LightColor), 32, SPROP_UNSIGNED, SendProxy_Color32ToInt), + + SendPropEHandle(SENDINFO(m_hTargetEntity)), + SendPropBool(SENDINFO(m_bState)), + SendPropFloat(SENDINFO(m_flLightFOV)), + SendPropBool(SENDINFO(m_bEnableShadows)), + SendPropBool(SENDINFO(m_bLightOnlyTarget)), + SendPropBool(SENDINFO(m_bLightWorld)), + SendPropBool(SENDINFO(m_bCameraSpace)), + SendPropVector(SENDINFO(m_LinearFloatLightColor)), + SendPropFloat(SENDINFO(m_flAmbient)), + SendPropString(SENDINFO(m_SpotlightTextureName)), + SendPropInt(SENDINFO(m_nSpotlightTextureFrame)), + SendPropFloat(SENDINFO(m_flNearZ), 16, SPROP_ROUNDDOWN, 0.0f, 500.0f), + SendPropFloat(SENDINFO(m_flFarZ), 18, SPROP_ROUNDDOWN, 0.0f, 1500.0f), + SendPropInt(SENDINFO(m_nShadowQuality), 1, SPROP_UNSIGNED) // Just one bit for now END_SEND_TABLE() //----------------------------------------------------------------------------- @@ -334,6 +352,11 @@ END_SEND_TABLE() //----------------------------------------------------------------------------- CEnvCascadeLight::CEnvCascadeLight(void) { +#ifdef MAPBASE + m_LightColor.Init(255, 255, 255, 255); +#else + m_LightColor.Init(255, 255, 255, 1); +#endif m_bState = true; m_flLightFOV = 45.0f; m_bEnableShadows = true; @@ -371,7 +394,7 @@ void CEnvCascadeLight::Preparation() //if second csm is exist if (CSMSecond) { - CEnvCascadeLightSecond* SecondCSM = dynamic_cast(CSMSecond); + SecondCSM = dynamic_cast(CSMSecond); SecondCSM->SetAbsAngles(GetAbsAngles()); SecondCSM->SetAbsOrigin(GetAbsOrigin()); SecondCSM->SetParent(GetBaseEntity()); @@ -430,7 +453,9 @@ void UTIL_ColorStringToLinearFloatColorCSMFake(Vector& color, const char* pStrin bool CEnvCascadeLight::KeyValue(const char* szKeyName, const char* szValue) { - if (FStrEq(szKeyName, "lightcolor")) + + if (FStrEq(szKeyName, "lightcolor") || FStrEq(szKeyName, "color")) + { Vector tmp; UTIL_ColorStringToLinearFloatColorCSMFake(tmp, szValue); @@ -460,10 +485,6 @@ void CEnvCascadeLight::InputSetEnableShadows(inputdata_t& inputdata) m_bEnableShadows = inputdata.value.Bool(); } -//void CEnvProjectedTexture::InputSetLightColor( inputdata_t &inputdata ) -//{ - //m_cLightColor = inputdata.value.Color32(); -//} void CEnvCascadeLight::InputSetAmbient(inputdata_t& inputdata) { @@ -491,12 +512,27 @@ void CEnvCascadeLight::Activate(void) void CEnvCascadeLight::InitialThink(void) { m_hTargetEntity = gEntList.FindEntityByName(NULL, m_target); - float bibigon = defdist.GetFloat() / curdist.GetFloat(); curFOV.SetValue(defFOV.GetFloat() * bibigon); m_flLightFOV = curFOV.GetFloat(); - //if(pEnv != NULL) - //SetAbsOrigin(Vector(pEnv->GetAbsOrigin().x, pEnv->GetAbsOrigin().y, pEnv->GetAbsOrigin().z + curdist.GetInt())); +} + +void CEnvCascadeLight::InputSetAngles(inputdata_t& inputdata) +{ + const char* pAngles = inputdata.value.String(); + + QAngle angles; + UTIL_StringToVector(angles.Base(), pAngles); + + pEnv->SetAbsAngles(angles); + +} + +void CEnvCascadeLight::InputSetLightColor(inputdata_t& inputdata) +{ + m_LightColor = inputdata.value.Color32(); + SecondCSM->m_LightColor = inputdata.value.Color32(); + //m_LinearFloatLightColor.Init(1.0f, 1.0f, 1.0f); } int CEnvCascadeLight::UpdateTransmitState() diff --git a/sp/src/vgui2/vgui_controls/Debug/vc120.pdb b/sp/src/vgui2/vgui_controls/Debug/vc120.pdb index 2578eb1fa51f5b60b14b1f516a12a5ab3474c20a..3b2694f12d79150bb8c7427808f5b906872c7298 100644 GIT binary patch delta 71931 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