-Now You not have to copy pitch from "Pitch" to "Angles" in light_env.
-Fixed pitch problems
This commit is contained in:
2023-01-18 22:39:36 +03:00
parent 903b637cf6
commit 0ff4a5d86b
4 changed files with 159 additions and 30 deletions

View File

@@ -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;

View File

@@ -78,16 +78,14 @@ void CLightOrigin::Spawn()
if (pEntity)
{
CEnvLight* pEnv = dynamic_cast<CEnvLight*>(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]);

View File

@@ -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();
}

View File

@@ -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