From 39ed87570bdb2f86969d4be821c94b722dc71179 Mon Sep 17 00:00:00 2001 From: Joe Ludwig Date: Wed, 26 Jun 2013 15:22:04 -0700 Subject: First version of the SOurce SDK 2013 --- mp/src/game/client/lampbeamproxy.cpp | 91 ++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 mp/src/game/client/lampbeamproxy.cpp (limited to 'mp/src/game/client/lampbeamproxy.cpp') diff --git a/mp/src/game/client/lampbeamproxy.cpp b/mp/src/game/client/lampbeamproxy.cpp new file mode 100644 index 00000000..3a8db095 --- /dev/null +++ b/mp/src/game/client/lampbeamproxy.cpp @@ -0,0 +1,91 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//=============================================================================// +#include "cbase.h" +#include "proxyentity.h" +#include "materialsystem/imaterialvar.h" +#include "materialsystem/imaterial.h" +#include "view.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +//----------------------------------------------------------------------------- +// Purpose: Used for 'card' beams on lamps, this material fades the sprite out +// as the viewer nears, so that the viewer can't see that the effect is really +// a card. +//----------------------------------------------------------------------------- +class CLampBeamProxy : public CEntityMaterialProxy +{ +public: + CLampBeamProxy( void ); + virtual ~CLampBeamProxy( void ); + virtual bool Init( IMaterial *pMaterial, KeyValues* pKeyValues ); + virtual void OnBind( C_BaseEntity *pC_BaseEntity ); + + virtual IMaterial * GetMaterial(); + +private: + IMaterialVar *m_pFadeValue; +}; + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +CLampBeamProxy::CLampBeamProxy( void ) +{ + m_pFadeValue = NULL; +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +CLampBeamProxy::~CLampBeamProxy( void ) +{ +} + +//----------------------------------------------------------------------------- +// Purpose: Get pointer to the color value +// Input : *pMaterial - +//----------------------------------------------------------------------------- +bool CLampBeamProxy::Init( IMaterial *pMaterial, KeyValues* pKeyValues ) +{ + assert( pMaterial ); + + // Need to get the color variable. + bool found; + m_pFadeValue = pMaterial->FindVar( "$alpha", &found ); + return found; +} + +//----------------------------------------------------------------------------- +// Purpose: +// Input : *pC_BaseEntity - +//----------------------------------------------------------------------------- +#define FADE_DIST 150 + +void CLampBeamProxy::OnBind( C_BaseEntity *pEnt ) +{ + if ( !m_pFadeValue ) + return; + + Vector vecLocal = pEnt->GetAbsOrigin() - CurrentViewOrigin(); + VectorNormalize( vecLocal ); + + float fade = 1.0 - fabs( vecLocal.z ); + + m_pFadeValue->SetFloatValue( fade ); +} + +IMaterial *CLampBeamProxy::GetMaterial() +{ + if ( !m_pFadeValue ) + return NULL; + + return m_pFadeValue->GetOwningMaterial(); +} + +EXPOSE_INTERFACE( CLampBeamProxy, IMaterialProxy, "lampbeam" IMATERIAL_PROXY_INTERFACE_VERSION ); -- cgit v1.2.3