This commit is contained in:
2022-09-10 16:16:11 +03:00
parent 29936d96f8
commit a025c1dbc8
2 changed files with 50 additions and 47 deletions

View File

@@ -48,12 +48,12 @@ public:
virtual void Simulate();
private:
Vector LightEnvVector;
QAngle LightEnvAngle;
//Vector LightEnvVector;
//QAngle LightEnvAngle;
};
IMPLEMENT_CLIENTCLASS_DT(C_LightOrigin, DT_LightOrigin, CLightOrigin)
RecvPropVector(RECVINFO(LightEnvVector))
//RecvPropVector(RECVINFO(LightEnvVector))
END_RECV_TABLE()
void C_LightOrigin::Update()
@@ -105,10 +105,6 @@ private:
Vector m_CurrentLinearFloatLightColor;
float m_flCurrentLinearFloatLightAlpha;
float m_flColorTransitionTime;
void updatePos();
CBaseEntity* pEntity = NULL;
bool firstUpdate = true;
bool m_bState;
float m_flLightFOV;
bool m_bEnableShadows;
@@ -163,15 +159,6 @@ void C_EnvCascadeLight::ShutDownLightHandle( void )
}
}
void C_EnvCascadeLight::updatePos()
{
if (firstUpdate)
{
m_flNearZ = 5000;
m_flFarZ = 16000;
}
}
//-----------------------------------------------------------------------------
// Purpose:
// Input : updateType - how do you increase the light's height?
@@ -321,20 +308,6 @@ void C_EnvCascadeLight::UpdateLight( bool bForceUpdate )
state.m_nSpotlightTextureFrame = m_nSpotlightTextureFrame;
state.m_nShadowQuality = m_nShadowQuality; // Allow entity to affect shadow quality
#ifdef MAPBASE
state.m_bOrtho = csm_ortho.GetBool();
if (state.m_bOrtho)
{
state.m_fOrthoLeft = csm_ortho_left.GetInt();
state.m_fOrthoTop = csm_ortho_top.GetInt();
state.m_fOrthoRight = csm_ortho_right.GetInt();
state.m_fOrthoBottom = csm_ortho_bottom.GetInt();
state.m_fLinearAtten = ConVarRef("csm_current_distance").GetInt() * 2;
state.m_FarZAtten = ConVarRef("csm_current_distance").GetInt() * 2;
}
#endif // MAPBASE
if (m_LightHandle == CLIENTSHADOW_INVALID_HANDLE)
{
@@ -371,8 +344,6 @@ void C_EnvCascadeLight::UpdateLight( bool bForceUpdate )
void C_EnvCascadeLight::Simulate( void )
{
UpdateLight( true );
updatePos();
firstUpdate = false;
BaseClass::Simulate();
}

View File

@@ -45,7 +45,7 @@ private:
LINK_ENTITY_TO_CLASS(csmorigin, CLightOrigin);
BEGIN_DATADESC(CLightOrigin)
DEFINE_FIELD(LightEnvVector, FIELD_VECTOR),
//DEFINE_FIELD(LightEnvVector, FIELD_VECTOR),
DEFINE_THINKFUNC(InitialThink)
END_DATADESC()
@@ -68,7 +68,7 @@ void CLightOrigin::Spawn()
CEnvLight* pEnv = dynamic_cast<CEnvLight*>(pEntity);
QAngle bb = pEnv->GetAbsAngles();
bb.x = bb.x;
//bb.x = bb.x;
SetAbsAngles(bb);
ConColorMsg(Color(0,230,0), "light_environment Founded!\n");
@@ -266,21 +266,26 @@ public:
void Spawn();
void Preparation();
//Inputs
void InputTurnOn(inputdata_t& inputdata);
void InputTurnOff(inputdata_t& inputdata);
void InputSetEnableShadows(inputdata_t& inputdata);
void InputSetLightColor( inputdata_t &inputdata );
void InputSetSpotlightTexture(inputdata_t& inputdata);
void InputSetAmbient(inputdata_t& inputdata);
void InputSetAngles(inputdata_t& inputdata);
void InputAddAngles(inputdata_t& inputdata);
void InputResetAngles(inputdata_t& inputdata);
void InitialThink(void);
CNetworkHandle(CBaseEntity, m_hTargetEntity);
private:
CNetworkColor32(m_LightColor);
CLightOrigin* pEnv;
CLightOrigin* csm_origin;
CEnvCascadeLightSecond* SecondCSM;
CNetworkVar(bool, m_bState);
CNetworkVar(float, m_flLightFOV);
@@ -297,6 +302,8 @@ private:
CNetworkVar(float, m_flFarZ);
CNetworkVar(int, m_nShadowQuality);
QAngle DefaultAngle = QAngle(0, 0, 0);
QAngle CurrentAngle = QAngle(0, 0, 0);
};
LINK_ENTITY_TO_CLASS(env_cascade_light, CEnvCascadeLight);
@@ -317,16 +324,18 @@ DEFINE_KEYFIELD(m_nShadowQuality, FIELD_INTEGER, "shadowquality"),
DEFINE_FIELD(m_LinearFloatLightColor, FIELD_VECTOR),
DEFINE_KEYFIELD(EnableAngleFromEnv, FIELD_BOOLEAN, "uselightenvangles"),
//Inputs
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, "Texture", InputSetSpotlightTexture),
DEFINE_INPUTFUNC(FIELD_STRING, "SetAngles", InputSetAngles),
DEFINE_INPUTFUNC(FIELD_STRING, "AddAngles", InputAddAngles),
DEFINE_INPUTFUNC(FIELD_VOID, "ResetAngles", InputResetAngles),
DEFINE_THINKFUNC(InitialThink),
END_DATADESC()
@@ -375,8 +384,11 @@ CEnvCascadeLight::CEnvCascadeLight(void)
m_flNearZ = 8000.0f;
m_flFarZ = 16000.0f;
m_nShadowQuality = 0;
}
ConVar csm_second_intensity("csm_second_intensity", "2");
void CEnvCascadeLight::Preparation()
{
CreateEntityByName("csmorigin");
@@ -391,7 +403,7 @@ void CEnvCascadeLight::Preparation()
if (CSMOrigin)
{
pEnv = dynamic_cast<CLightOrigin*>(CSMOrigin);
csm_origin = dynamic_cast<CLightOrigin*>(CSMOrigin);
//if second csm is exist
if (CSMSecond)
{
@@ -408,17 +420,17 @@ void CEnvCascadeLight::Preparation()
DispatchSpawn(SecondCSM);
}
SetParent(pEnv, 1);
SetAbsOrigin(Vector(pEnv->GetAbsOrigin().x, pEnv->GetAbsOrigin().y, pEnv->GetAbsOrigin().z + curdist.GetInt()));
SetParent(csm_origin, 1);
SetAbsOrigin(Vector(csm_origin->GetAbsOrigin().x, csm_origin->GetAbsOrigin().y, csm_origin->GetAbsOrigin().z + curdist.GetInt()));
if (EnableAngleFromEnv)
{
pEnv->angFEnv = true;
csm_origin->angFEnv = true;
SetLocalAngles(QAngle(90, 0, 0));
}
else
{
pEnv->SetAbsAngles(QAngle((GetLocalAngles().x - 90), GetLocalAngles().y, -GetLocalAngles().z));
csm_origin->SetAbsAngles(QAngle((GetLocalAngles().x - 90), GetLocalAngles().y, -GetLocalAngles().z));
//Msg("pEnv local angle = %f %f %f \n", pEnv->GetLocalAngles().x, pEnv->GetLocalAngles().y, pEnv->GetLocalAngles().z);
SetLocalAngles(QAngle(90, 0, 0));
DevMsg("CSM using light_environment \n");
@@ -430,6 +442,9 @@ void CEnvCascadeLight::Preparation()
//CSMOrigin->SetNameAsCStr(bebra);
//ConColorMsg(Color(255,0,0), "CSMOrigin name is " + bebra);
DefaultAngle = csm_origin->GetAbsAngles();
CurrentAngle = csm_origin->GetAbsAngles();
DispatchSpawn(CSMOrigin);
@@ -511,7 +526,6 @@ void CEnvCascadeLight::Activate(void)
{
m_bState = true;
}
SetThink(&CEnvCascadeLight::InitialThink);
SetNextThink(gpGlobals->curtime + 0.1f);
@@ -526,6 +540,7 @@ void CEnvCascadeLight::InitialThink(void)
m_flLightFOV = curFOV.GetFloat();
}
void CEnvCascadeLight::InputSetAngles(inputdata_t& inputdata)
{
const char* pAngles = inputdata.value.String();
@@ -533,8 +548,25 @@ void CEnvCascadeLight::InputSetAngles(inputdata_t& inputdata)
QAngle angles;
UTIL_StringToVector(angles.Base(), pAngles);
pEnv->SetAbsAngles(angles);
CurrentAngle = angles;
csm_origin->SetAbsAngles(CurrentAngle);
}
void CEnvCascadeLight::InputAddAngles(inputdata_t& inputdata)
{
const char* pAngles = inputdata.value.String();
QAngle angles;
UTIL_StringToVector(angles.Base(), pAngles);
CurrentAngle = CurrentAngle + angles;
csm_origin->SetAbsAngles(CurrentAngle);
}
void CEnvCascadeLight::InputResetAngles(inputdata_t& inputdata)
{
CurrentAngle = DefaultAngle;
csm_origin->SetAbsAngles(CurrentAngle);
}
void CEnvCascadeLight::InputSetLightColor(inputdata_t& inputdata)