aboutsummaryrefslogtreecommitdiff
path: root/mp/src/game/server/lightglow.cpp
diff options
context:
space:
mode:
authorJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
committerJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
commit39ed87570bdb2f86969d4be821c94b722dc71179 (patch)
treeabc53757f75f40c80278e87650ea92808274aa59 /mp/src/game/server/lightglow.cpp
downloadsource-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz
source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/game/server/lightglow.cpp')
-rw-r--r--mp/src/game/server/lightglow.cpp136
1 files changed, 136 insertions, 0 deletions
diff --git a/mp/src/game/server/lightglow.cpp b/mp/src/game/server/lightglow.cpp
new file mode 100644
index 00000000..458815ee
--- /dev/null
+++ b/mp/src/game/server/lightglow.cpp
@@ -0,0 +1,136 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#include "cbase.h"
+#include "baseentity.h"
+#include "sendproxy.h"
+#include "sun_shared.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+#define LIGHTGLOW_MAXDIST_BITS 16
+#define LIGHTGLOW_MAXDIST_MAX_VALUE ((1 << LIGHTGLOW_MAXDIST_BITS)-1)
+
+#define LIGHTGLOW_OUTERMAXDIST_BITS 16
+#define LIGHTGLOW_OUTERMAXDIST_MAX_VALUE ((1 << LIGHTGLOW_OUTERMAXDIST_BITS)-1)
+
+class CLightGlow : public CBaseEntity
+{
+public:
+ DECLARE_CLASS( CLightGlow, CBaseEntity );
+ DECLARE_SERVERCLASS();
+ DECLARE_DATADESC();
+
+ CLightGlow();
+
+ virtual void Spawn( void );
+ virtual void Activate( void );
+ virtual int UpdateTransmitState( void );
+
+ void InputColor(inputdata_t &data);
+
+public:
+ CNetworkVar( int, m_nHorizontalSize );
+ CNetworkVar( int, m_nVerticalSize );
+ CNetworkVar( int, m_nMinDist );
+ CNetworkVar( int, m_nMaxDist );
+ CNetworkVar( int, m_nOuterMaxDist );
+
+ CNetworkVar( float, m_flGlowProxySize );
+ CNetworkVar( float, m_flHDRColorScale );
+};
+
+extern void SendProxy_Angles( const SendProp *pProp, const void *pStruct, const void *pData, DVariant *pOut, int iElement, int objectID );
+
+IMPLEMENT_SERVERCLASS_ST_NOBASE( CLightGlow, DT_LightGlow )
+ SendPropInt( SENDINFO(m_clrRender), 32, SPROP_UNSIGNED, SendProxy_Color32ToInt ),
+ SendPropInt( SENDINFO(m_nHorizontalSize), 16, SPROP_UNSIGNED ),
+ SendPropInt( SENDINFO(m_nVerticalSize), 16, SPROP_UNSIGNED ),
+ SendPropInt( SENDINFO(m_nMinDist), 16, SPROP_UNSIGNED ),
+ SendPropInt( SENDINFO(m_nMaxDist), LIGHTGLOW_MAXDIST_BITS, SPROP_UNSIGNED ),
+ SendPropInt( SENDINFO(m_nOuterMaxDist), LIGHTGLOW_OUTERMAXDIST_BITS, SPROP_UNSIGNED ),
+ SendPropInt( SENDINFO(m_spawnflags), 8, SPROP_UNSIGNED ),
+ SendPropVector(SENDINFO(m_vecOrigin), -1, SPROP_COORD ),
+ SendPropQAngles (SENDINFO(m_angRotation), 13, 0, SendProxy_Angles ),
+ SendPropEHandle (SENDINFO_NAME(m_hMoveParent, moveparent)),
+ SendPropFloat( SENDINFO(m_flGlowProxySize ), 6, SPROP_ROUNDUP, 0.0f, 64.0f ),
+ SendPropFloat( SENDINFO_NAME( m_flHDRColorScale, HDRColorScale ), 0, SPROP_NOSCALE, 0.0f, 100.0f ),
+END_SEND_TABLE()
+
+LINK_ENTITY_TO_CLASS( env_lightglow, CLightGlow );
+
+BEGIN_DATADESC( CLightGlow )
+
+ DEFINE_KEYFIELD( m_nVerticalSize, FIELD_INTEGER, "VerticalGlowSize" ),
+ DEFINE_KEYFIELD( m_nHorizontalSize, FIELD_INTEGER, "HorizontalGlowSize" ),
+ DEFINE_KEYFIELD( m_nMinDist, FIELD_INTEGER, "MinDist" ),
+ DEFINE_KEYFIELD( m_nMaxDist, FIELD_INTEGER, "MaxDist" ),
+ DEFINE_KEYFIELD( m_nOuterMaxDist, FIELD_INTEGER, "OuterMaxDist" ),
+ DEFINE_KEYFIELD( m_flGlowProxySize, FIELD_FLOAT, "GlowProxySize" ),
+ DEFINE_KEYFIELD( m_flHDRColorScale, FIELD_FLOAT, "HDRColorScale" ),
+ DEFINE_INPUTFUNC( FIELD_COLOR32, "Color", InputColor ),
+
+END_DATADESC()
+
+//-----------------------------------------------------------------------------
+// Constructor
+//-----------------------------------------------------------------------------
+CLightGlow::CLightGlow( void )
+{
+ m_nHorizontalSize = 0.0f;
+ m_nVerticalSize = 0.0f;
+ m_nMinDist = 0.0f;
+ m_nMaxDist = 0.0f;
+
+ m_flGlowProxySize = 2.0f;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CLightGlow::Spawn( void )
+{
+ BaseClass::Spawn();
+
+ // No model but we still need to force this!
+ AddEFlags( EFL_FORCE_CHECK_TRANSMIT );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose: Always transmit light glows to clients to avoid spikes as we enter
+// or leave PVS. Done because we often have many glows in an area.
+//-----------------------------------------------------------------------------
+int CLightGlow::UpdateTransmitState( void )
+{
+ return SetTransmitState( FL_EDICT_ALWAYS );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CLightGlow::Activate()
+{
+ BaseClass::Activate();
+
+ if ( m_nMaxDist > LIGHTGLOW_MAXDIST_MAX_VALUE )
+ {
+ Warning( "env_lightglow maxdist too large (%d should be %d).\n", m_nMaxDist.Get(), LIGHTGLOW_MAXDIST_MAX_VALUE );
+ m_nMaxDist = LIGHTGLOW_MAXDIST_MAX_VALUE;
+ }
+
+ if ( m_nOuterMaxDist > LIGHTGLOW_OUTERMAXDIST_MAX_VALUE )
+ {
+ Warning( "env_lightglow outermaxdist too large (%d should be %d).\n", m_nOuterMaxDist.Get(), LIGHTGLOW_OUTERMAXDIST_MAX_VALUE );
+ m_nOuterMaxDist = LIGHTGLOW_OUTERMAXDIST_MAX_VALUE;
+ }
+}
+
+void CLightGlow::InputColor(inputdata_t &inputdata)
+{
+ m_clrRender = inputdata.value.Color32();
+}