From bcd7cfad251de13731432cd9f8d995c3bc2ef059 Mon Sep 17 00:00:00 2001 From: celisej567 Date: Mon, 5 Sep 2022 21:54:11 +0300 Subject: [PATCH] new inputs -new input LightColor that changes a color. -new input SetAngles that changes angles -added csm_intensity convar -now TurnOn and TurnOff its Enable and Disable --- client/c_env_cascade_light.cpp | 147 ++++++++++++++++++++++++++++++--- client/clientshadowmgr.cpp | 6 -- fgd/csm.fgd | 6 +- server/env_cascade_light.cpp | 88 ++++++++++++++------ 4 files changed, 203 insertions(+), 44 deletions(-) diff --git a/client/c_env_cascade_light.cpp b/client/c_env_cascade_light.cpp index 616f674..ce12c25 100644 --- a/client/c_env_cascade_light.cpp +++ b/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/client/clientshadowmgr.cpp b/client/clientshadowmgr.cpp index 3f0ebd5..50bc6a1 100644 --- a/client/clientshadowmgr.cpp +++ b/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/fgd/csm.fgd b/fgd/csm.fgd index efa77c9..fe0d06b 100644 --- a/fgd/csm.fgd +++ b/fgd/csm.fgd @@ -19,8 +19,10 @@ ambient(integer) :"Ambient" : 0 : "idk" - input TurnOn(void) : "Turn on the texture" - input TurnOff(void) : "Turn off the texture" + input Enable(void) : "Turn on the texture" + input Disable(void) : "Turn off the texture" input EnableShadows(bool) : "Turn off the shadows" input SpotlightTexture(string) : "Change texture" + input LightColor(color255) : "Set the light color." + input SetAngles(string) : "Set the sun direction." ] \ No newline at end of file diff --git a/server/env_cascade_light.cpp b/server/env_cascade_light.cpp index 27b4102..135d394 100644 --- a/server/env_cascade_light.cpp +++ b/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()