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/server/shadowcontrol.cpp | 152 +++++++++++++++++++++++++++++++++++ 1 file changed, 152 insertions(+) create mode 100644 mp/src/game/server/shadowcontrol.cpp (limited to 'mp/src/game/server/shadowcontrol.cpp') diff --git a/mp/src/game/server/shadowcontrol.cpp b/mp/src/game/server/shadowcontrol.cpp new file mode 100644 index 00000000..68e9743c --- /dev/null +++ b/mp/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; +} -- cgit v1.2.3