diff options
| author | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
|---|---|---|
| committer | Joe Ludwig <[email protected]> | 2013-06-26 15:22:04 -0700 |
| commit | 39ed87570bdb2f86969d4be821c94b722dc71179 (patch) | |
| tree | abc53757f75f40c80278e87650ea92808274aa59 /mp/src/game/server/env_screenoverlay.cpp | |
| download | source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip | |
First version of the SOurce SDK 2013
Diffstat (limited to 'mp/src/game/server/env_screenoverlay.cpp')
| -rw-r--r-- | mp/src/game/server/env_screenoverlay.cpp | 269 |
1 files changed, 269 insertions, 0 deletions
diff --git a/mp/src/game/server/env_screenoverlay.cpp b/mp/src/game/server/env_screenoverlay.cpp new file mode 100644 index 00000000..d643c111 --- /dev/null +++ b/mp/src/game/server/env_screenoverlay.cpp @@ -0,0 +1,269 @@ +//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose: Entity to control screen overlays on a player
+//
+//=============================================================================//
+
+#include "cbase.h"
+#include "shareddefs.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include "tier0/memdbgon.h"
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+class CEnvScreenOverlay : public CPointEntity
+{
+ DECLARE_CLASS( CEnvScreenOverlay, CPointEntity );
+public:
+ DECLARE_DATADESC();
+ DECLARE_SERVERCLASS();
+
+ CEnvScreenOverlay();
+
+ // Always transmit to clients
+ virtual int UpdateTransmitState();
+ virtual void Spawn( void );
+ virtual void Precache( void );
+
+ void InputStartOverlay( inputdata_t &inputdata );
+ void InputStopOverlay( inputdata_t &inputdata );
+ void InputSwitchOverlay( inputdata_t &inputdata );
+
+ void SetActive( bool bActive ) { m_bIsActive = bActive; }
+
+protected:
+ CNetworkArray( string_t, m_iszOverlayNames, MAX_SCREEN_OVERLAYS );
+ CNetworkArray( float, m_flOverlayTimes, MAX_SCREEN_OVERLAYS );
+ CNetworkVar( float, m_flStartTime );
+ CNetworkVar( int, m_iDesiredOverlay );
+ CNetworkVar( bool, m_bIsActive );
+};
+
+LINK_ENTITY_TO_CLASS( env_screenoverlay, CEnvScreenOverlay );
+
+BEGIN_DATADESC( CEnvScreenOverlay )
+
+// Silence, Classcheck!
+// DEFINE_ARRAY( m_iszOverlayNames, FIELD_STRING, MAX_SCREEN_OVERLAYS ),
+// DEFINE_ARRAY( m_flOverlayTimes, FIELD_FLOAT, MAX_SCREEN_OVERLAYS ),
+
+ DEFINE_KEYFIELD( m_iszOverlayNames[0], FIELD_STRING, "OverlayName1" ),
+ DEFINE_KEYFIELD( m_iszOverlayNames[1], FIELD_STRING, "OverlayName2" ),
+ DEFINE_KEYFIELD( m_iszOverlayNames[2], FIELD_STRING, "OverlayName3" ),
+ DEFINE_KEYFIELD( m_iszOverlayNames[3], FIELD_STRING, "OverlayName4" ),
+ DEFINE_KEYFIELD( m_iszOverlayNames[4], FIELD_STRING, "OverlayName5" ),
+ DEFINE_KEYFIELD( m_iszOverlayNames[5], FIELD_STRING, "OverlayName6" ),
+ DEFINE_KEYFIELD( m_iszOverlayNames[6], FIELD_STRING, "OverlayName7" ),
+ DEFINE_KEYFIELD( m_iszOverlayNames[7], FIELD_STRING, "OverlayName8" ),
+ DEFINE_KEYFIELD( m_iszOverlayNames[8], FIELD_STRING, "OverlayName9" ),
+ DEFINE_KEYFIELD( m_iszOverlayNames[9], FIELD_STRING, "OverlayName10" ),
+ DEFINE_KEYFIELD( m_flOverlayTimes[0], FIELD_FLOAT, "OverlayTime1" ),
+ DEFINE_KEYFIELD( m_flOverlayTimes[1], FIELD_FLOAT, "OverlayTime2" ),
+ DEFINE_KEYFIELD( m_flOverlayTimes[2], FIELD_FLOAT, "OverlayTime3" ),
+ DEFINE_KEYFIELD( m_flOverlayTimes[3], FIELD_FLOAT, "OverlayTime4" ),
+ DEFINE_KEYFIELD( m_flOverlayTimes[4], FIELD_FLOAT, "OverlayTime5" ),
+ DEFINE_KEYFIELD( m_flOverlayTimes[5], FIELD_FLOAT, "OverlayTime6" ),
+ DEFINE_KEYFIELD( m_flOverlayTimes[6], FIELD_FLOAT, "OverlayTime7" ),
+ DEFINE_KEYFIELD( m_flOverlayTimes[7], FIELD_FLOAT, "OverlayTime8" ),
+ DEFINE_KEYFIELD( m_flOverlayTimes[8], FIELD_FLOAT, "OverlayTime9" ),
+ DEFINE_KEYFIELD( m_flOverlayTimes[9], FIELD_FLOAT, "OverlayTime10" ),
+
+ // Class CEnvScreenOverlay:
+ DEFINE_FIELD( m_iDesiredOverlay, FIELD_INTEGER ),
+ DEFINE_FIELD( m_flStartTime, FIELD_TIME ),
+ DEFINE_FIELD( m_bIsActive, FIELD_BOOLEAN ),
+
+ DEFINE_INPUTFUNC( FIELD_VOID, "StartOverlays", InputStartOverlay ),
+ DEFINE_INPUTFUNC( FIELD_VOID, "StopOverlays", InputStopOverlay ),
+ DEFINE_INPUTFUNC( FIELD_INTEGER, "SwitchOverlay", InputSwitchOverlay ),
+
+END_DATADESC()
+
+void SendProxy_String_tToString( const SendProp *pProp, const void *pStruct, const void *pData, DVariant *pOut, int iElement, int objectID )
+{
+ string_t *pString = (string_t*)pData;
+ pOut->m_pString = (char*)STRING( *pString );
+}
+
+IMPLEMENT_SERVERCLASS_ST( CEnvScreenOverlay, DT_EnvScreenOverlay )
+ SendPropArray( SendPropString( SENDINFO_ARRAY( m_iszOverlayNames ), 0, SendProxy_String_tToString ), m_iszOverlayNames ),
+ SendPropArray( SendPropFloat( SENDINFO_ARRAY( m_flOverlayTimes ), 11, SPROP_ROUNDDOWN, -1.0f, 63.0f ), m_flOverlayTimes ),
+ SendPropFloat( SENDINFO( m_flStartTime ), 32, SPROP_NOSCALE ),
+ SendPropInt( SENDINFO( m_iDesiredOverlay ), 5 ),
+ SendPropBool( SENDINFO( m_bIsActive ) ),
+END_SEND_TABLE()
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+CEnvScreenOverlay::CEnvScreenOverlay( void )
+{
+ m_flStartTime = 0;
+ m_iDesiredOverlay = 0;
+ m_bIsActive = false;
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CEnvScreenOverlay::Spawn( void )
+{
+ Precache();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CEnvScreenOverlay::Precache( void )
+{
+ for ( int i = 0; i < 10; i++ )
+ {
+ if ( m_iszOverlayNames[i] == NULL_STRING )
+ continue;
+
+ PrecacheMaterial( STRING( m_iszOverlayNames[i] ) );
+ }
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+// Input : &inputdata -
+//-----------------------------------------------------------------------------
+void CEnvScreenOverlay::InputStartOverlay( inputdata_t &inputdata )
+{
+ if ( m_iszOverlayNames[0] == NULL_STRING )
+ {
+ Warning("env_screenoverlay %s has no overlays to display.\n", STRING(GetEntityName()) );
+ return;
+ }
+
+ m_flStartTime = gpGlobals->curtime;
+ m_bIsActive = true;
+
+ // Turn off any other screen overlays out there
+ CBaseEntity *pEnt = NULL;
+ while ( (pEnt = gEntList.FindEntityByClassname( pEnt, "env_screenoverlay" )) != NULL )
+ {
+ if ( pEnt != this )
+ {
+ CEnvScreenOverlay *pOverlay = assert_cast<CEnvScreenOverlay*>(pEnt);
+ pOverlay->SetActive( false );
+ }
+ }
+}
+
+int CEnvScreenOverlay::UpdateTransmitState()
+{
+ return SetTransmitState( FL_EDICT_ALWAYS );
+}
+
+
+void CEnvScreenOverlay::InputSwitchOverlay( inputdata_t &inputdata )
+{
+ int iNewOverlay = inputdata.value.Int() - 1;
+ iNewOverlay = abs( iNewOverlay );
+
+ if ( m_iszOverlayNames[iNewOverlay] == NULL_STRING )
+ {
+ Warning("env_screenoverlay %s has no overlays to display.\n", STRING(GetEntityName()) );
+ return;
+ }
+
+ m_iDesiredOverlay = iNewOverlay;
+ m_flStartTime = gpGlobals->curtime;
+}
+
+void CEnvScreenOverlay::InputStopOverlay( inputdata_t &inputdata )
+{
+ if ( m_iszOverlayNames[0] == NULL_STRING )
+ {
+ Warning("env_screenoverlay %s has no overlays to display.\n", STRING(GetEntityName()) );
+ return;
+ }
+
+ m_flStartTime = -1;
+ m_bIsActive = false;
+}
+
+// ====================================================================================
+//
+// Screen-space effects
+//
+// ====================================================================================
+
+class CEnvScreenEffect : public CPointEntity
+{
+ DECLARE_CLASS( CEnvScreenEffect, CPointEntity );
+public:
+ DECLARE_DATADESC();
+ DECLARE_SERVERCLASS();
+
+ // We always want to be sent to the client
+ CEnvScreenEffect( void ) { AddEFlags( EFL_FORCE_CHECK_TRANSMIT ); }
+ virtual int UpdateTransmitState( void ) { return SetTransmitState( FL_EDICT_ALWAYS ); }
+ virtual void Spawn( void );
+ virtual void Precache( void );
+
+private:
+
+ void InputStartEffect( inputdata_t &inputdata );
+ void InputStopEffect( inputdata_t &inputdata );
+
+ CNetworkVar( float, m_flDuration );
+ CNetworkVar( int, m_nType );
+};
+
+LINK_ENTITY_TO_CLASS( env_screeneffect, CEnvScreenEffect );
+
+// CEnvScreenEffect
+BEGIN_DATADESC( CEnvScreenEffect )
+ DEFINE_FIELD( m_flDuration, FIELD_FLOAT ),
+ DEFINE_KEYFIELD( m_nType, FIELD_INTEGER, "type" ),
+ DEFINE_FIELD( m_flDuration, FIELD_FLOAT ),
+ DEFINE_INPUTFUNC( FIELD_FLOAT, "StartEffect", InputStartEffect ),
+ DEFINE_INPUTFUNC( FIELD_FLOAT, "StopEffect", InputStopEffect ),
+END_DATADESC()
+
+IMPLEMENT_SERVERCLASS_ST( CEnvScreenEffect, DT_EnvScreenEffect )
+ SendPropFloat( SENDINFO( m_flDuration ), 0, SPROP_NOSCALE ),
+ SendPropInt( SENDINFO( m_nType ), 32, SPROP_UNSIGNED ),
+END_SEND_TABLE()
+
+void CEnvScreenEffect::Spawn( void )
+{
+ Precache();
+}
+
+void CEnvScreenEffect::Precache( void )
+{
+ PrecacheMaterial( "effects/stun" );
+ PrecacheMaterial( "effects/introblur" );
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CEnvScreenEffect::InputStartEffect( inputdata_t &inputdata )
+{
+ // Take the duration as our value
+ m_flDuration = inputdata.value.Float();
+
+ EntityMessageBegin( this );
+ WRITE_BYTE( 0 );
+ MessageEnd();
+}
+
+//-----------------------------------------------------------------------------
+// Purpose:
+//-----------------------------------------------------------------------------
+void CEnvScreenEffect::InputStopEffect( inputdata_t &inputdata )
+{
+ m_flDuration = inputdata.value.Float();
+
+ // Send the stop notification
+ EntityMessageBegin( this );
+ WRITE_BYTE( 1 );
+ MessageEnd();
+}
|