Added convar

+added csm_enable convar
+some other stuff
This commit is contained in:
2022-09-19 20:40:42 +03:00
parent 6892d205b8
commit 699be4a212
2 changed files with 83 additions and 42 deletions

View File

@@ -21,6 +21,7 @@
static ConVarRef mat_slopescaledepthbias_shadowmap("mat_slopescaledepthbias_shadowmap");
static ConVarRef mat_depthbias_shadowmap("mat_depthbias_shadowmap");
static ConVar scissor("r_flashlightscissor", "0");
ConVar csm_enable("csm_enable", "1");
#ifdef MAPBASE
//static ConVar csm_ortho("csm_ortho","0", 0, "Turn light into ortho. Im lazy right now to make this works fine");
@@ -141,6 +142,7 @@ END_RECV_TABLE()
C_EnvCascadeLight::C_EnvCascadeLight( void )
{
m_LightHandle = CLIENTSHADOW_INVALID_HANDLE;
}
@@ -152,10 +154,9 @@ C_EnvCascadeLight::~C_EnvCascadeLight( void )
void C_EnvCascadeLight::ShutDownLightHandle( void )
{
// Clear out the light
if( m_LightHandle != CLIENTSHADOW_INVALID_HANDLE )
if (m_LightHandle != CLIENTSHADOW_INVALID_HANDLE)
{
g_pClientShadowMgr->DestroyFlashlight( m_LightHandle );
g_pClientShadowMgr->DestroyFlashlight(m_LightHandle);
m_LightHandle = CLIENTSHADOW_INVALID_HANDLE;
}
}
@@ -178,11 +179,8 @@ void C_EnvCascadeLight::UpdateLight( bool bForceUpdate )
if (m_bState == false)
{
if (m_LightHandle != CLIENTSHADOW_INVALID_HANDLE)
{
ShutDownLightHandle();
}
if(m_LightHandle!=CLIENTSHADOW_INVALID_HANDLE)
ShutDownLightHandle();
return;
}
@@ -344,7 +342,8 @@ void C_EnvCascadeLight::UpdateLight( bool bForceUpdate )
void C_EnvCascadeLight::Simulate( void )
{
UpdateLight( true );
m_bState = csm_enable.GetBool();
UpdateLight(true);
BaseClass::Simulate();
}
@@ -435,7 +434,6 @@ C_EnvCascadeLightSecond::~C_EnvCascadeLightSecond(void)
void C_EnvCascadeLightSecond::ShutDownLightHandle(void)
{
// Clear out the light
if (m_LightHandle != CLIENTSHADOW_INVALID_HANDLE)
{
g_pClientShadowMgr->DestroyFlashlight(m_LightHandle);
@@ -454,11 +452,11 @@ void C_EnvCascadeLightSecond::UpdateLight(bool bForceUpdate)
if (m_bState == false)
{
if (m_LightHandle != CLIENTSHADOW_INVALID_HANDLE)
{
ShutDownLightHandle();
}
if(m_LightHandle!=CLIENTSHADOW_INVALID_HANDLE)
ShutDownLightHandle();
return;
}
@@ -601,6 +599,7 @@ void C_EnvCascadeLightSecond::UpdateLight(bool bForceUpdate)
}
*/
#endif
if (m_LightHandle == CLIENTSHADOW_INVALID_HANDLE)
{
@@ -643,14 +642,12 @@ void C_EnvCascadeLightSecond::UpdateLight(bool bForceUpdate)
//mat_slopescaledepthbias_shadowmap.SetValue("4");
//mat_depthbias_shadowmap.SetValue("0.00001");
scissor.SetValue("0");
}
void C_EnvCascadeLightSecond::Simulate(void)
{
m_bState = csm_enable.GetBool();
UpdateLight(true);
BaseClass::Simulate();
}

View File

@@ -7,10 +7,13 @@
#include "cbase.h"
#include "shareddefs.h"
#include "lights.h"
#include "tier1/utlstring.h"
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
#define ENV_CASCADE_STARTON (1<<0)
static ConVar defdist("csm_default_distance", "1000", FCVAR_DEVELOPMENTONLY, "Default Z distance. Used for some fov calculations. Please dont change");
@@ -18,6 +21,7 @@ static ConVar curdist("csm_current_distance","14000", 0, "Current Z distance. Yo
static ConVar defFOV("csm_default_fov","15", FCVAR_DEVELOPMENTONLY, "Default FOV. Used for some fov calculations. Please dont change");
static ConVar curFOV("csm_current_fov","15", 0, "Current FOV. You can change it");
static ConVar csm_second_fov("csm_second_fov", "26", FCVAR_NONE ,"FOV of the second csm.");
ConVar csm_enable("csm_enable", "1");
class CLightOrigin : public CPointEntity
{
@@ -65,7 +69,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");
@@ -171,7 +175,7 @@ CEnvCascadeLightSecond::CEnvCascadeLightSecond(void)
#else
m_LightColor.Init(255, 255, 255, 1);
#endif
m_bState = true;
m_bState = csm_enable.GetBool();
m_flLightFOV = 45.0f;
m_bEnableShadows = true;
m_bLightOnlyTarget = false;
@@ -232,6 +236,7 @@ void CEnvCascadeLightSecond::Activate(void)
void CEnvCascadeLightSecond::InitialThink(void)
{
m_bState = csm_enable.GetBool();
float bibigon = defdist.GetFloat() / curdist.GetFloat();
m_flLightFOV = csm_second_fov.GetFloat() * bibigon;
m_hTargetEntity = gEntList.FindEntityByName(NULL, m_target);
@@ -263,21 +268,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);
@@ -294,6 +304,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);
@@ -314,16 +326,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()
@@ -357,7 +371,7 @@ CEnvCascadeLight::CEnvCascadeLight(void)
#else
m_LightColor.Init(255, 255, 255, 1);
#endif
m_bState = true;
m_bState = csm_enable.GetBool();
m_flLightFOV = 45.0f;
m_bEnableShadows = true;
m_bLightOnlyTarget = false;
@@ -372,8 +386,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");
@@ -383,17 +400,18 @@ void CEnvCascadeLight::Preparation()
CBaseEntity* CSMSecond = NULL;
CSMOrigin = gEntList.FindEntityByClassname(CSMOrigin, "csmorigin");
CSMSecond = gEntList.FindEntityByClassname(CSMSecond, "second_csm");
//if origin is exist
if (CSMOrigin)
{
pEnv = dynamic_cast<CLightOrigin*>(CSMOrigin);
CSMSecond = gEntList.FindEntityByClassname(CSMSecond, "second_csm");
csm_origin = dynamic_cast<CLightOrigin*>(CSMOrigin);
//if second csm is exist
if (CSMSecond)
{
//if (GetBaseEntity()->GetEntityNameAsCStr() != NULL)
//CSMSecond->SetNameAsCStr(GetBaseEntity()->GetEntityNameAsCStr() + '_' + 's' + 'e' + 'c' + 'o' + 'n' + 'd');
SecondCSM = dynamic_cast<CEnvCascadeLightSecond*>(CSMSecond);
SecondCSM->SetAbsAngles(GetAbsAngles());
SecondCSM->SetAbsOrigin(GetAbsOrigin());
@@ -404,25 +422,33 @@ 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));
Msg("pEnv local angle = %f %f %f \n", pEnv->GetLocalAngles().x, pEnv->GetLocalAngles().y, pEnv->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");
}
//DispatchSpawn(CSMSecond);
//const char* bebra = GetBaseEntity()->GetEntityNameAsCStr();
//bebra += '_' + 'o' + 'r' + 'i' + 'g' + 'i' + 'n';
//CSMOrigin->SetNameAsCStr(bebra);
//ConColorMsg(Color(255,0,0), "CSMOrigin name is " + bebra);
DefaultAngle = csm_origin->GetAbsAngles();
CurrentAngle = csm_origin->GetAbsAngles();
DispatchSpawn(CSMOrigin);
}
else
@@ -502,7 +528,6 @@ void CEnvCascadeLight::Activate(void)
{
m_bState = true;
}
SetThink(&CEnvCascadeLight::InitialThink);
SetNextThink(gpGlobals->curtime + 0.1f);
@@ -511,12 +536,14 @@ void CEnvCascadeLight::Activate(void)
void CEnvCascadeLight::InitialThink(void)
{
m_bState = csm_enable.GetBool();
m_hTargetEntity = gEntList.FindEntityByName(NULL, m_target);
float bibigon = defdist.GetFloat() / curdist.GetFloat();
curFOV.SetValue(defFOV.GetFloat() * bibigon);
m_flLightFOV = curFOV.GetFloat();
}
void CEnvCascadeLight::InputSetAngles(inputdata_t& inputdata)
{
const char* pAngles = inputdata.value.String();
@@ -524,8 +551,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)