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/EnvFade.cpp | 200 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 200 insertions(+) create mode 100644 mp/src/game/server/EnvFade.cpp (limited to 'mp/src/game/server/EnvFade.cpp') diff --git a/mp/src/game/server/EnvFade.cpp b/mp/src/game/server/EnvFade.cpp new file mode 100644 index 00000000..7e219bba --- /dev/null +++ b/mp/src/game/server/EnvFade.cpp @@ -0,0 +1,200 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Implements visual effects entities: sprites, beams, bubbles, etc. +// +// $NoKeywords: $ +//=============================================================================// + +#include "cbase.h" +#include "shake.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include "tier0/memdbgon.h" + +class CEnvFade : public CLogicalEntity +{ +private: + + float m_Duration; + float m_HoldTime; + + COutputEvent m_OnBeginFade; + + DECLARE_DATADESC(); + +public: + DECLARE_CLASS( CEnvFade, CLogicalEntity ); + + virtual void Spawn( void ); + + inline float Duration( void ) { return m_Duration; } + inline float HoldTime( void ) { return m_HoldTime; } + + inline void SetDuration( float duration ) { m_Duration = duration; } + inline void SetHoldTime( float hold ) { m_HoldTime = hold; } + + int DrawDebugTextOverlays(void); + + // Inputs + void InputFade( inputdata_t &inputdata ); +}; + +LINK_ENTITY_TO_CLASS( env_fade, CEnvFade ); + +BEGIN_DATADESC( CEnvFade ) + + DEFINE_KEYFIELD( m_Duration, FIELD_FLOAT, "duration" ), + DEFINE_KEYFIELD( m_HoldTime, FIELD_FLOAT, "holdtime" ), + + DEFINE_INPUTFUNC( FIELD_VOID, "Fade", InputFade ), + + DEFINE_OUTPUT( m_OnBeginFade, "OnBeginFade"), + +END_DATADESC() + + + +#define SF_FADE_IN 0x0001 // Fade in, not out +#define SF_FADE_MODULATE 0x0002 // Modulate, don't blend +#define SF_FADE_ONLYONE 0x0004 +#define SF_FADE_STAYOUT 0x0008 + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CEnvFade::Spawn( void ) +{ +} + + +//----------------------------------------------------------------------------- +// Purpose: Input handler that does the screen fade. +//----------------------------------------------------------------------------- +void CEnvFade::InputFade( inputdata_t &inputdata ) +{ + int fadeFlags = 0; + + if ( m_spawnflags & SF_FADE_IN ) + { + fadeFlags |= FFADE_IN; + } + else + { + fadeFlags |= FFADE_OUT; + } + + if ( m_spawnflags & SF_FADE_MODULATE ) + { + fadeFlags |= FFADE_MODULATE; + } + + if ( m_spawnflags & SF_FADE_STAYOUT ) + { + fadeFlags |= FFADE_STAYOUT; + } + + if ( m_spawnflags & SF_FADE_ONLYONE ) + { + if ( inputdata.pActivator->IsNetClient() ) + { + UTIL_ScreenFade( inputdata.pActivator, m_clrRender, Duration(), HoldTime(), fadeFlags ); + } + } + else + { + UTIL_ScreenFadeAll( m_clrRender, Duration(), HoldTime(), fadeFlags|FFADE_PURGE ); + } + + m_OnBeginFade.FireOutput( inputdata.pActivator, this ); +} + + +//----------------------------------------------------------------------------- +// Purpose: Fetches the arguments from the command line for the fadein and fadeout +// console commands. +// Input : flTime - Returns the fade time in seconds (the time to fade in or out) +// clrFade - Returns the color to fade to or from. +//----------------------------------------------------------------------------- +static void GetFadeParms( const CCommand &args, float &flTime, color32 &clrFade) +{ + flTime = 2.0f; + + if ( args.ArgC() > 1 ) + { + flTime = atof( args[1] ); + } + + clrFade.r = 0; + clrFade.g = 0; + clrFade.b = 0; + clrFade.a = 255; + + if ( args.ArgC() > 4 ) + { + clrFade.r = atoi( args[2] ); + clrFade.g = atoi( args[3] ); + clrFade.b = atoi( args[4] ); + + if ( args.ArgC() == 5 ) + { + clrFade.a = atoi( args[5] ); + } + } +} + + +//----------------------------------------------------------------------------- +// Purpose: Console command to fade out to a given color. +//----------------------------------------------------------------------------- +static void CC_FadeOut( const CCommand &args ) +{ + float flTime; + color32 clrFade; + GetFadeParms( args, flTime, clrFade ); + + CBasePlayer *pPlayer = UTIL_GetCommandClient(); + UTIL_ScreenFade( pPlayer, clrFade, flTime, 0, FFADE_OUT | FFADE_PURGE | FFADE_STAYOUT ); +} +static ConCommand fadeout("fadeout", CC_FadeOut, "fadeout {time r g b}: Fades the screen to black or to the specified color over the given number of seconds.", FCVAR_CHEAT ); + + +//----------------------------------------------------------------------------- +// Purpose: Console command to fade in from a given color. +//----------------------------------------------------------------------------- +static void CC_FadeIn( const CCommand &args ) +{ + float flTime; + color32 clrFade; + GetFadeParms( args, flTime, clrFade ); + + CBasePlayer *pPlayer = UTIL_GetCommandClient(); + UTIL_ScreenFade( pPlayer, clrFade, flTime, 0, FFADE_IN | FFADE_PURGE ); +} + +static ConCommand fadein("fadein", CC_FadeIn, "fadein {time r g b}: Fades the screen in from black or from the specified color over the given number of seconds.", FCVAR_CHEAT ); + + +//----------------------------------------------------------------------------- +// Purpose: Draw any debug text overlays +// Output : Current text offset from the top +//----------------------------------------------------------------------------- +int CEnvFade::DrawDebugTextOverlays( void ) +{ + int text_offset = BaseClass::DrawDebugTextOverlays(); + + if (m_debugOverlays & OVERLAY_TEXT_BIT) + { + char tempstr[512]; + + // print duration + Q_snprintf(tempstr,sizeof(tempstr)," duration: %f", m_Duration); + EntityText(text_offset,tempstr,0); + text_offset++; + + // print hold time + Q_snprintf(tempstr,sizeof(tempstr)," hold time: %f", m_HoldTime); + EntityText(text_offset,tempstr,0); + text_offset++; + } + return text_offset; +} \ No newline at end of file -- cgit v1.2.3