From 0ff4a5d86b199888e7a4583d25a6655317ecbefd Mon Sep 17 00:00:00 2001 From: celisej567 Date: Wed, 18 Jan 2023 22:39:36 +0300 Subject: [PATCH] Angles -Now You not have to copy pitch from "Pitch" to "Angles" in light_env. -Fixed pitch problems --- client/c_env_cascade_light.cpp | 7 +- server/env_cascade_light.cpp | 36 ++++------ server/lights.cpp | 118 +++++++++++++++++++++++++++++++++ server/lights.h | 28 +++++++- 4 files changed, 159 insertions(+), 30 deletions(-) diff --git a/client/c_env_cascade_light.cpp b/client/c_env_cascade_light.cpp index 90eef09..16c222a 100644 --- a/client/c_env_cascade_light.cpp +++ b/client/c_env_cascade_light.cpp @@ -543,9 +543,6 @@ 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; #ifdef MAPBASE float flAlpha = m_flCurrentLinearFloatLightAlpha * (1.0f / 255.0f); @@ -561,8 +558,8 @@ void C_EnvCascadeLightSecond::UpdateLight(bool bForceUpdate) state.m_Color[3] = 0.0f; // fixme: need to make ambient work m_flAmbient; state.m_NearZ = m_flNearZ; state.m_FarZ = m_flFarZ; - state.m_flShadowSlopeScaleDepthBias = ConVarRef("mat_slopescaledepthbias_shadowmap").GetFloat();//csm_slopescaledepthbias_shadowmap.GetFloat(); - state.m_flShadowDepthBias = ConVarRef("mat_depthbias_shadowmap").GetFloat();//csm_depthbias_shadowmap.GetFloat(); + state.m_flShadowSlopeScaleDepthBias = ConVarRef("mat_slopescaledepthbias_shadowmap").GetFloat(); + state.m_flShadowDepthBias = ConVarRef("mat_depthbias_shadowmap").GetFloat(); state.m_bEnableShadows = m_bEnableShadows; state.m_pSpotlightTexture = materials->FindTexture(m_SpotlightTextureName, TEXTURE_GROUP_OTHER, false); state.m_nSpotlightTextureFrame = m_nSpotlightTextureFrame; diff --git a/server/env_cascade_light.cpp b/server/env_cascade_light.cpp index 44be6f5..6de831f 100644 --- a/server/env_cascade_light.cpp +++ b/server/env_cascade_light.cpp @@ -78,16 +78,14 @@ void CLightOrigin::Spawn() if (pEntity) { CEnvLight* pEnv = dynamic_cast(pEntity); - - QAngle bb = pEnv->GetAbsAngles(); - SetAbsAngles(bb); - ConColorMsg(Color(0,230,0), "light_environment Founded!\n"); + SetAbsAngles(QAngle(-90 - pEnv->m_iPitch, pEnv->GetAbsAngles().y, pEnv->GetAbsAngles().z)); + DevMsg("[FAKE CSM] light_environment Founded!\n"); } else { //Msg("What the fuck? Map dont have light_environment with targetname!"); - ConColorMsg(Color(230, 0, 0), "What the fuck? Map dont have light_environment with targetname!\n"); + DevMsg("[FAKE CSM] Cant find light_environment with targetname!\n"); } } } @@ -449,7 +447,7 @@ private: CEnvCascadeLightThird* ThirdCSM; CNetworkVar(bool, m_bState); CNetworkVar(float, m_flLightFOV); - CNetworkVar(bool, EnableAngleFromEnv); + CNetworkVar(bool, m_bEnableAngleFromEnv); CNetworkVar(bool, m_bEnableShadows); CNetworkVar(bool, m_bLightOnlyTarget); CNetworkVar(bool, m_bLightWorld); @@ -485,7 +483,7 @@ DEFINE_KEYFIELD(m_flNearZ, FIELD_FLOAT, "nearz"), DEFINE_KEYFIELD(m_flFarZ, FIELD_FLOAT, "farz"), DEFINE_KEYFIELD(m_nShadowQuality, FIELD_INTEGER, "shadowquality"), DEFINE_FIELD(m_LinearFloatLightColor, FIELD_VECTOR), -DEFINE_KEYFIELD(EnableAngleFromEnv, FIELD_BOOLEAN, "uselightenvangles"), +DEFINE_KEYFIELD(m_bEnableAngleFromEnv, FIELD_BOOLEAN, "uselightenvangles"), //Inputs @@ -538,7 +536,7 @@ CEnvCascadeLight::CEnvCascadeLight(void) m_bLightOnlyTarget = false; m_bLightWorld = true; m_bCameraSpace = false; - EnableAngleFromEnv = false; + m_bEnableAngleFromEnv = false; Q_strcpy(m_SpotlightTextureName.GetForModify(), "tools\\fakecsm\\mask_center"); m_nSpotlightTextureFrame = 0; @@ -615,20 +613,13 @@ void CEnvCascadeLight::Preparation() SetAbsOrigin(Vector(csm_origin->GetAbsOrigin().x, csm_origin->GetAbsOrigin().y, csm_origin->GetAbsOrigin().z + curdist.GetInt())); - if (EnableAngleFromEnv) - { + if (m_bEnableAngleFromEnv) csm_origin->angFEnv = true; - SetLocalAngles(QAngle(90, 0, 0)); - - } else - { csm_origin->SetAbsAngles(QAngle((GetLocalAngles().x - 90), GetLocalAngles().y, -GetLocalAngles().z)); - SetLocalAngles(QAngle(90, 0, 0)); - DevMsg("CSM using light_environment \n"); - } + SetLocalAngles(QAngle(90, 0, 0)); DefaultAngle = csm_origin->GetAbsAngles(); CurrentAngle = DefaultAngle; @@ -638,7 +629,7 @@ void CEnvCascadeLight::Preparation() } else { - Msg("Main csm entity can't find \"csmorigin\" entity!"); + DevMsg("[FAKE CSM] Main csm entity can't find \"csmorigin\" entity!"); } } @@ -654,11 +645,11 @@ void UTIL_ColorStringToLinearFloatColorCSMFake(Vector& color, const char* pStrin { float tmp[4]; UTIL_StringToFloatArray(tmp, 4, pString); - if (tmp[4] <= 0.0f) - { - tmp[4] = 255.0f; + if (tmp[3] <= 0.0f) + { + tmp[3] = 255.0f; } - tmp[4] *= (1.0f / 255.0f); + tmp[3] *= (1.0f / 255.0f); color.x = GammaToLinear(tmp[0] * (1.0f / 255.0f)) * tmp[3]; color.y = GammaToLinear(tmp[1] * (1.0f / 255.0f)) * tmp[3]; color.z = GammaToLinear(tmp[2] * (1.0f / 255.0f)) * tmp[3]; @@ -669,6 +660,7 @@ bool CEnvCascadeLight::KeyValue(const char* szKeyName, const char* szValue) if (FStrEq(szKeyName, "lightcolor") || FStrEq(szKeyName, "color")) { + float tmp[4]; UTIL_StringToFloatArray(tmp, 4, szValue); m_LightColor.SetR(tmp[0]); diff --git a/server/lights.cpp b/server/lights.cpp index 5e6a091..402ff3d 100644 --- a/server/lights.cpp +++ b/server/lights.cpp @@ -236,12 +236,61 @@ LINK_ENTITY_TO_CLASS( light_glspot, CLight ); LINK_ENTITY_TO_CLASS( light_environment, CEnvLight ); +BEGIN_DATADESC(CEnvLight) + +// Fuctions +DEFINE_FUNCTION(FadeThink), + +// Inputs +DEFINE_INPUTFUNC(FIELD_VOID, "Toggle", InputToggle), +DEFINE_INPUTFUNC(FIELD_VOID, "TurnOn", InputTurnOn), +DEFINE_INPUTFUNC(FIELD_VOID, "TurnOff", InputTurnOff), + +END_DATADESC() + +//------------------------------------------------------------------------------ +// Purpose : Fade light to new starting pattern value then stop thinking +//------------------------------------------------------------------------------ +void CEnvLight::FadeThink(void) +{ + if (m_iCurrentFade < m_iTargetFade) + { + m_iCurrentFade++; + } + else if (m_iCurrentFade > m_iTargetFade) + { + m_iCurrentFade--; + } + + // If we're done fading instantiate our light pattern and stop thinking + if (m_iCurrentFade == m_iTargetFade) + { + engine->LightStyle(m_iStyle, (char*)STRING(m_iszPattern)); + SetNextThink(TICK_NEVER_THINK); + } + // Otherwise instantiate our current fade value and keep thinking + else + { + char sCurString[2]; + sCurString[0] = m_iCurrentFade; + sCurString[1] = 0; + engine->LightStyle(m_iStyle, sCurString); + + // UNDONE: Consider making this settable war to control fade speed + SetNextThink(gpGlobals->curtime + 0.1f); + } +} + bool CEnvLight::KeyValue( const char *szKeyName, const char *szValue ) { if (FStrEq(szKeyName, "_light")) { // nothing } + else if (FStrEq(szKeyName, "pitch")) + { + m_iPitch = atoi(szValue); + } else { return BaseClass::KeyValue( szKeyName, szValue ); @@ -250,8 +299,77 @@ bool CEnvLight::KeyValue( const char *szKeyName, const char *szValue ) return true; } +//----------------------------------------------------------------------------- +// Purpose: Turn the light on +//----------------------------------------------------------------------------- +void CEnvLight::TurnOn(void) +{ + if (m_iszPattern != NULL_STRING) + { + engine->LightStyle(m_iStyle, (char*)STRING(m_iszPattern)); + } + else + { + engine->LightStyle(m_iStyle, "m"); + } + + CLEARBITS(m_spawnflags, SF_LIGHT_START_OFF); +} + +//----------------------------------------------------------------------------- +// Purpose: Turn the light off +//----------------------------------------------------------------------------- +void CEnvLight::TurnOff(void) +{ + engine->LightStyle(m_iStyle, "a"); + SETBITS(m_spawnflags, SF_LIGHT_START_OFF); +} + +//----------------------------------------------------------------------------- +// Purpose: Toggle the light on/off +//----------------------------------------------------------------------------- +void CEnvLight::Toggle(void) +{ + //Toggle it + if (FBitSet(m_spawnflags, SF_LIGHT_START_OFF)) + { + TurnOn(); + } + else + { + TurnOff(); + } +} + void CEnvLight::Spawn( void ) { BaseClass::Spawn( ); } + +//----------------------------------------------------------------------------- +// Purpose: Handle the "turnon" input handler +// Input : &inputdata - +//----------------------------------------------------------------------------- +void CEnvLight::InputTurnOn(inputdata_t& inputdata) +{ + TurnOn(); +} + +//----------------------------------------------------------------------------- +// Purpose: Handle the "turnoff" input handler +// Input : &inputdata - +//----------------------------------------------------------------------------- +void CEnvLight::InputTurnOff(inputdata_t& inputdata) +{ + TurnOff(); +} + +//----------------------------------------------------------------------------- +// Purpose: Handle the "toggle" input handler +// Input : &inputdata - +//----------------------------------------------------------------------------- +void CEnvLight::InputToggle(inputdata_t& inputdata) +{ + Toggle(); +} diff --git a/server/lights.h b/server/lights.h index b457da9..aa20a8d 100644 --- a/server/lights.h +++ b/server/lights.h @@ -48,10 +48,32 @@ private: class CEnvLight : public CLight { public: - DECLARE_CLASS(CEnvLight, CLight); + DECLARE_CLASS( CEnvLight, CLight ); + DECLARE_DATADESC(); - bool KeyValue(const char* szKeyName, const char* szValue); - void Spawn(void); + + + bool KeyValue( const char *szKeyName, const char *szValue ); + void Spawn( void ); + + void FadeThink(void); + + void TurnOn(void); + void TurnOff(void); + void Toggle(void); + + void InputToggle(inputdata_t& inputdata); + void InputTurnOn(inputdata_t& inputdata); + void InputTurnOff(inputdata_t& inputdata); + + int m_iPitch; + +private: + int m_iStyle; + int m_iDefaultStyle; + string_t m_iszPattern; + char m_iCurrentFade; + char m_iTargetFade; }; #endif // LIGHTS_H