aboutsummaryrefslogtreecommitdiff
path: root/sp/src/game/server/shadowcontrol.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 /sp/src/game/server/shadowcontrol.cpp
downloadsource-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz
source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip
First version of the SOurce SDK 2013
Diffstat (limited to 'sp/src/game/server/shadowcontrol.cpp')
-rw-r--r--sp/src/game/server/shadowcontrol.cpp152
1 files changed, 152 insertions, 0 deletions
diff --git a/sp/src/game/server/shadowcontrol.cpp b/sp/src/game/server/shadowcontrol.cpp
new file mode 100644
index 00000000..68e9743c
--- /dev/null
+++ b/sp/src/game/server/shadowcontrol.cpp
@@ -0,0 +1,152 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Shadow control entity.
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#include "cbase.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+//------------------------------------------------------------------------------
+// FIXME: This really should inherit from something more lightweight
+//------------------------------------------------------------------------------
+
+
+//------------------------------------------------------------------------------
+// Purpose : Shadow control entity
+//------------------------------------------------------------------------------
+class CShadowControl : public CBaseEntity
+{
+public:
+ DECLARE_CLASS( CShadowControl, CBaseEntity );
+
+ CShadowControl();
+
+ void Spawn( void );
+ bool KeyValue( const char *szKeyName, const char *szValue );
+ int UpdateTransmitState();
+ void InputSetAngles( inputdata_t &inputdata );
+
+ virtual int ObjectCaps( void ) { return BaseClass::ObjectCaps() & ~FCAP_ACROSS_TRANSITION; }
+
+ DECLARE_SERVERCLASS();
+ DECLARE_DATADESC();
+
+private:
+ CNetworkVector( m_shadowDirection );
+ CNetworkColor32( m_shadowColor );
+ CNetworkVar( float, m_flShadowMaxDist );
+ CNetworkVar( bool, m_bDisableShadows );
+};
+
+LINK_ENTITY_TO_CLASS(shadow_control, CShadowControl);
+
+BEGIN_DATADESC( CShadowControl )
+
+ DEFINE_KEYFIELD( m_flShadowMaxDist, FIELD_FLOAT, "distance" ),
+ DEFINE_KEYFIELD( m_bDisableShadows, FIELD_BOOLEAN, "disableallshadows" ),
+
+ // Inputs
+ DEFINE_INPUT( m_shadowColor, FIELD_COLOR32, "color" ),
+ DEFINE_INPUT( m_shadowDirection, FIELD_VECTOR, "direction" ),
+ DEFINE_INPUT( m_flShadowMaxDist, FIELD_FLOAT, "SetDistance" ),
+ DEFINE_INPUT( m_bDisableShadows, FIELD_BOOLEAN, "SetShadowsDisabled" ),
+
+ DEFINE_INPUTFUNC( FIELD_STRING, "SetAngles", InputSetAngles ),
+
+END_DATADESC()
+
+
+IMPLEMENT_SERVERCLASS_ST_NOBASE(CShadowControl, DT_ShadowControl)
+ SendPropVector(SENDINFO(m_shadowDirection), -1, SPROP_NOSCALE ),
+ SendPropInt(SENDINFO(m_shadowColor), 32, SPROP_UNSIGNED),
+ SendPropFloat(SENDINFO(m_flShadowMaxDist), 0, SPROP_NOSCALE ),
+ SendPropBool(SENDINFO(m_bDisableShadows)),
+END_SEND_TABLE()
+
+
+CShadowControl::CShadowControl()
+{
+ m_shadowDirection.Init( 0.2, 0.2, -2 );
+ m_flShadowMaxDist = 50.0f;
+ m_shadowColor.Init( 64, 64, 64, 0 );
+ m_bDisableShadows = false;
+}
+
+
+//------------------------------------------------------------------------------
+// Purpose : Send even though we don't have a model
+//------------------------------------------------------------------------------
+int CShadowControl::UpdateTransmitState()
+{
+ // ALWAYS transmit to all clients.
+ return SetTransmitState( FL_EDICT_ALWAYS );
+}
+
+
+bool CShadowControl::KeyValue( const char *szKeyName, const char *szValue )
+{
+ if ( FStrEq( szKeyName, "color" ) )
+ {
+ color32 tmp;
+ UTIL_StringToColor32( &tmp, szValue );
+ m_shadowColor = tmp;
+ return true;
+ }
+
+ if ( FStrEq( szKeyName, "angles" ) )
+ {
+ QAngle angles;
+ UTIL_StringToVector( angles.Base(), szValue );
+ if (angles == vec3_angle)
+ {
+ angles.Init( 80, 30, 0 );
+ }
+ Vector vForward;
+ AngleVectors( angles, &vForward );
+ m_shadowDirection = vForward;
+ return true;
+ }
+
+ // For backward compatibility...
+ if ( FStrEq( szKeyName, "direction" ) )
+ {
+ // Only use this if angles haven't been set...
+ if ( fabs(m_shadowDirection->LengthSqr() - 1.0f) > 1e-3 )
+ {
+ Vector vTemp;
+ UTIL_StringToVector( vTemp.Base(), szValue );
+ m_shadowDirection = vTemp;
+ }
+ return true;
+ }
+
+ return BaseClass::KeyValue( szKeyName, szValue );
+}
+
+//------------------------------------------------------------------------------
+// Purpose :
+//------------------------------------------------------------------------------
+void CShadowControl::Spawn( void )
+{
+ Precache();
+ SetSolid( SOLID_NONE );
+}
+
+//------------------------------------------------------------------------------
+// Input values
+//------------------------------------------------------------------------------
+void CShadowControl::InputSetAngles( inputdata_t &inputdata )
+{
+ const char *pAngles = inputdata.value.String();
+
+ QAngle angles;
+ UTIL_StringToVector( angles.Base(), pAngles );
+
+ Vector vTemp;
+ AngleVectors( angles, &vTemp );
+ m_shadowDirection = vTemp;
+}