Files
HL2Overcharged/game/client/c_env_projectedtexture.h
2025-05-21 21:09:22 +03:00

115 lines
2.7 KiB
C++

//========= Copyright 1996-2005, Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//=============================================================================//
#ifndef C_ENVPROJECTED_TEXTURE_H
#define C_ENVPROJECTED_TEXTURE_H
#ifdef _WIN32
#pragma once
#endif
#include "c_baseentity.h"
#include "basetypes.h"
#include "../../materialsystem/stdshaders/IShaderExtension.h"
//-----------------------------------------------------------------------------
// Purpose:
//-----------------------------------------------------------------------------
class C_EnvProjectedTexture : public C_BaseEntity
{
DECLARE_CLASS(C_EnvProjectedTexture, C_BaseEntity);
public:
DECLARE_CLIENTCLASS();
virtual void OnDataChanged(DataUpdateType_t updateType);
void ShutDownLightHandle(void);
virtual void Simulate();
void UpdateLight(bool bForceUpdate);
// GSTRINGMIGRATION
virtual void UpdateOnRemove()
{
if (m_pVolmetricMesh != NULL)
{
CMatRenderContextPtr pRenderContext(materials);
pRenderContext->DestroyStaticMesh(m_pVolmetricMesh);
m_pVolmetricMesh = NULL;
}
BaseClass::UpdateOnRemove();
}
virtual bool IsTransparent() { return true; }
virtual bool IsTwoPass() { return false; }
virtual void GetRenderBoundsWorldspace(Vector& mins, Vector& maxs)
{
if (m_bEnableVolumetrics)
{
mins = m_vecRenderBoundsMin;
maxs = m_vecRenderBoundsMax;
}
else
{
BaseClass::GetRenderBoundsWorldspace(mins, maxs);
}
}
virtual bool ShouldDraw() { return true; }
virtual int DrawModel(int flags);
virtual bool ShouldReceiveProjectedTextures(int flags) { return false; }
void ClearVolumetricsMesh();
C_EnvProjectedTexture();
~C_EnvProjectedTexture();
private:
void RebuildVolumetricMesh();
void GetShadowViewSetup(CViewSetup &setup);
CTextureReference m_SpotlightTexture;
IMesh *m_pVolmetricMesh;
CMaterialReference m_matVolumetricsMaterial;
ClientShadowHandle_t m_LightHandle;
EHANDLE m_hTargetEntity;
bool m_bState;
float m_flLightFOV;
bool m_bEnableShadows;
bool m_bLightOnlyTarget;
bool m_bLightWorld;
bool m_bCameraSpace;
Vector m_LinearFloatLightColor;
float m_flAmbient;
float m_flNearZ;
float m_flFarZ;
char m_SpotlightTextureName[MAX_PATH];
int m_nSpotlightTextureFrame;
int m_nShadowQuality;
FlashlightState_t m_FlashlightState;
UberlightState_t m_UberlightState;
Vector m_vecRenderBoundsMin, m_vecRenderBoundsMax;
bool m_bEnableVolumetrics;
bool m_bEnableVolumetricsLOD;
float m_flVolumetricsFadeDistance;
int m_iVolumetricsQuality;
float m_flVolumetricsMultiplier;
float m_flVolumetricsQualityBias;
float m_flLastFOV;
int m_iCurrentVolumetricsSubDiv;
};
#endif // C_ENV_PROJECTED_TEXTURE_H