1018 lines
29 KiB
C++
1018 lines
29 KiB
C++
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
// Purpose:
|
||
|
//
|
||
|
// $NoKeywords: $
|
||
|
//=============================================================================//
|
||
|
#include "client_pch.h"
|
||
|
#include "cl_demoaction.h"
|
||
|
#include "cl_demoactionmanager.h"
|
||
|
#include "demo.h"
|
||
|
#include "shake.h"
|
||
|
#include "cdll_engine_int.h"
|
||
|
#include "tmessage.h"
|
||
|
#include "sound.h"
|
||
|
#include "soundflags.h"
|
||
|
#include "cl_demoaction_types.h"
|
||
|
|
||
|
// memdbgon must be the last include file in a .cpp file!!!
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : demoframe -
|
||
|
// demotime -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool CDemoActionSkipAhead::Update( const DemoActionTimingContext& tc )
|
||
|
{
|
||
|
// Not active yet
|
||
|
if ( !BaseClass::Update( tc ) )
|
||
|
return false;
|
||
|
|
||
|
if ( GetActionFired() )
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : *pInitData -
|
||
|
// Output : Returns true on success, false on failure.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool CDemoActionSkipAhead::Init( KeyValues *pInitData )
|
||
|
{
|
||
|
if ( !BaseClass::Init( pInitData ) )
|
||
|
return false;
|
||
|
|
||
|
SetSkipToTick( pInitData->GetInt( "skiptotick", -1 ) );
|
||
|
SetSkipToTime( pInitData->GetFloat( "skiptotime", -1.0f ) );
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : buf -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionSkipAhead::SaveKeysToBuffer( int depth, CUtlBuffer& buf )
|
||
|
{
|
||
|
BaseClass::SaveKeysToBuffer( depth, buf );
|
||
|
|
||
|
if ( m_nSkipToTick != -1 )
|
||
|
{
|
||
|
BufPrintf( depth, buf, "skiptotick \"%i\"\n",
|
||
|
m_nSkipToTick );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if ( m_flSkipToTime != -1.0f )
|
||
|
{
|
||
|
BufPrintf( depth, buf, "skiptotime \"%.3f\"\n",
|
||
|
m_flSkipToTime );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : frame -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionSkipAhead::SetSkipToTick( int frame )
|
||
|
{
|
||
|
m_bUsingSkipTick = frame != -1;
|
||
|
m_nSkipToTick = frame;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : t -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionSkipAhead::SetSkipToTime( float t )
|
||
|
{
|
||
|
m_bUsingSkipTick = !( t != -1.0f );
|
||
|
m_flSkipToTime = t;
|
||
|
}
|
||
|
|
||
|
void CDemoActionSkipAhead::FireAction( void )
|
||
|
{
|
||
|
// demo->StartSkippingAhead( m_bUsingSkipFrame, m_nSkipToFrame, m_flSkipToTime );
|
||
|
// demo->PushDemoAction( GetActionName() );
|
||
|
|
||
|
// Don't this this, instead wait for demo to notify us that it's finished skipping
|
||
|
// SetFinishedAction( true );
|
||
|
if ( m_bUsingSkipTick )
|
||
|
{
|
||
|
demoplayer->SkipToTick( m_nSkipToTick, false, false );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
demoplayer->SkipToTick( TIME_TO_TICKS(m_flSkipToTime), false, false );
|
||
|
}
|
||
|
|
||
|
SetFinishedAction( true );
|
||
|
}
|
||
|
|
||
|
#include "tier0/memdbgoff.h"
|
||
|
DECLARE_DEMOACTION( DEMO_ACTION_SKIPAHEAD, CDemoActionSkipAhead );
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : demoframe -
|
||
|
// demotime -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool CDemoActionStopPlayback::Update( const DemoActionTimingContext& tc )
|
||
|
{
|
||
|
// Not active yet
|
||
|
if ( !BaseClass::Update( tc ) )
|
||
|
return false;
|
||
|
|
||
|
if ( GetActionFired() )
|
||
|
{
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
void CDemoActionStopPlayback::FireAction( void )
|
||
|
{
|
||
|
if ( demoplayer->IsPlayingBack() )
|
||
|
{
|
||
|
Cbuf_AddText( "disconnect\n" );
|
||
|
}
|
||
|
SetActionFired( true );
|
||
|
}
|
||
|
|
||
|
#include "tier0/memdbgoff.h"
|
||
|
DECLARE_DEMOACTION( DEMO_ACTION_STOPPLAYBACK, CDemoActionStopPlayback );
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : *pInitData -
|
||
|
// Output : Returns true on success, false on failure.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool CDemoActionPlayCommands::Init( KeyValues *pInitData )
|
||
|
{
|
||
|
if ( !BaseClass::Init( pInitData ) )
|
||
|
return false;
|
||
|
|
||
|
SetCommandStream( pInitData->GetString( "commands", "" ) );
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : *stream -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionPlayCommands::SetCommandStream( char const *stream )
|
||
|
{
|
||
|
Q_strncpy( m_szCommandStream, stream, sizeof( m_szCommandStream ) );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Output : char
|
||
|
//-----------------------------------------------------------------------------
|
||
|
char const *CDemoActionPlayCommands::GetCommandStream( void ) const
|
||
|
{
|
||
|
return m_szCommandStream;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionPlayCommands::FireAction( void )
|
||
|
{
|
||
|
if( GetCommandStream()[0] )
|
||
|
{
|
||
|
Cbuf_AddText( va( "%s\n", GetCommandStream() ) );
|
||
|
}
|
||
|
SetFinishedAction( true );
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : buf -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionPlayCommands::SaveKeysToBuffer( int depth, CUtlBuffer& buf )
|
||
|
{
|
||
|
BaseClass::SaveKeysToBuffer( depth, buf );
|
||
|
|
||
|
BufPrintf( depth, buf, "commands \"%s\"\n",
|
||
|
GetCommandStream() );
|
||
|
}
|
||
|
|
||
|
#include "tier0/memdbgoff.h"
|
||
|
DECLARE_DEMOACTION( DEMO_ACTION_PLAYCOMMANDS, CDemoActionPlayCommands );
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : *pInitData -
|
||
|
// Output : Returns true on success, false on failure.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool CDemoActionScreenFadeStart::Init( KeyValues *pInitData )
|
||
|
{
|
||
|
if ( !BaseClass::Init( pInitData ) )
|
||
|
return false;
|
||
|
|
||
|
float duration = pInitData->GetFloat( "duration", 0.0f );
|
||
|
float holdTime = pInitData->GetFloat( "holdtime", 0.0f );
|
||
|
int fadein = pInitData->GetInt( "FFADE_IN", 0 );
|
||
|
int fadeout = pInitData->GetInt( "FFADE_OUT", 0 );
|
||
|
int fademodulate = pInitData->GetInt( "FFADE_MODULATE", 0 );
|
||
|
int fadestayout = pInitData->GetInt( "FFADE_STAYOUT", 0 );
|
||
|
int fadepurge = pInitData->GetInt( "FFADE_PURGE", 0 );
|
||
|
int r = pInitData->GetInt( "r", 255 );
|
||
|
int g = pInitData->GetInt( "g", 255 );
|
||
|
int b = pInitData->GetInt( "b", 255 );
|
||
|
int a = pInitData->GetInt( "a", 255 );
|
||
|
|
||
|
fade.duration = (unsigned short)((float)(1<<SCREENFADE_FRACBITS) * duration );
|
||
|
fade.holdTime = (unsigned short)((float)(1<<SCREENFADE_FRACBITS) * holdTime );
|
||
|
|
||
|
fade.fadeFlags = 0;
|
||
|
|
||
|
if ( fadein )
|
||
|
{
|
||
|
fade.fadeFlags |= FFADE_IN;
|
||
|
}
|
||
|
if ( fadeout )
|
||
|
{
|
||
|
fade.fadeFlags |= FFADE_OUT;
|
||
|
}
|
||
|
if ( fademodulate )
|
||
|
{
|
||
|
fade.fadeFlags |= FFADE_MODULATE;
|
||
|
}
|
||
|
if ( fadestayout )
|
||
|
{
|
||
|
fade.fadeFlags |= FFADE_STAYOUT;
|
||
|
}
|
||
|
if ( fadepurge )
|
||
|
{
|
||
|
fade.fadeFlags |= FFADE_PURGE;
|
||
|
}
|
||
|
|
||
|
fade.r = r;
|
||
|
fade.g = g;
|
||
|
fade.b = b;
|
||
|
fade.a = a;
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Output : ScreenFade_t const
|
||
|
//-----------------------------------------------------------------------------
|
||
|
ScreenFade_t *CDemoActionScreenFadeStart::GetScreenFade( void )
|
||
|
{
|
||
|
return &fade;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionScreenFadeStart::FireAction( void )
|
||
|
{
|
||
|
g_ClientDLL->View_Fade( (ScreenFade_t *)GetScreenFade() );
|
||
|
SetFinishedAction( true );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : buf -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionScreenFadeStart::SaveKeysToBuffer( int depth, CUtlBuffer& buf )
|
||
|
{
|
||
|
BaseClass::SaveKeysToBuffer( depth, buf );
|
||
|
|
||
|
ScreenFade_t const *f = GetScreenFade();
|
||
|
|
||
|
float duration = f->duration * (1.0f/(float)(1<<SCREENFADE_FRACBITS));
|
||
|
float holdTime = f->holdTime * (1.0f/(float)(1<<SCREENFADE_FRACBITS));
|
||
|
int fadein = f->fadeFlags & FFADE_IN;
|
||
|
int fadeout = f->fadeFlags & FFADE_OUT;
|
||
|
int fademodulate = f->fadeFlags & FFADE_MODULATE;
|
||
|
int fadestayout = f->fadeFlags & FFADE_STAYOUT;
|
||
|
int fadepurge = f->fadeFlags & FFADE_PURGE;
|
||
|
|
||
|
BufPrintf( depth, buf, "duration \"%.3f\"\n", duration );
|
||
|
BufPrintf( depth, buf, "holdtime \"%.3f\"\n", holdTime );
|
||
|
|
||
|
if ( fadein > 0 ) BufPrintf( depth, buf, "FFADE_IN \"1\"\n" );
|
||
|
if ( fadeout > 0 ) BufPrintf( depth, buf, "FFADE_OUT \"1\"\n" );
|
||
|
if ( fademodulate > 0 ) BufPrintf( depth, buf, "FFADE_MODULATE \"1\"\n" );
|
||
|
if ( fadestayout > 0 ) BufPrintf( depth, buf, "FFADE_STAYOUT \"1\"\n" );
|
||
|
if ( fadepurge > 0 ) BufPrintf( depth, buf, "FFADE_PURGE \"1\"\n" );
|
||
|
|
||
|
BufPrintf( depth, buf, "r \"%i\"\n", f->r );
|
||
|
BufPrintf( depth, buf, "g \"%i\"\n", f->g );
|
||
|
BufPrintf( depth, buf, "b \"%i\"\n", f->b );
|
||
|
BufPrintf( depth, buf, "a \"%i\"\n", f->a );
|
||
|
}
|
||
|
|
||
|
#include "tier0/memdbgoff.h"
|
||
|
DECLARE_DEMOACTION( DEMO_ACTION_SCREENFADE_START, CDemoActionScreenFadeStart );
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : *text -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionTextMessageStart::SetMessageText( char const *text )
|
||
|
{
|
||
|
Q_strncpy( m_szMessageText, text, sizeof( m_szMessageText ) );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Output : char const
|
||
|
//-----------------------------------------------------------------------------
|
||
|
char const *CDemoActionTextMessageStart::GetMessageText( void ) const
|
||
|
{
|
||
|
return m_szMessageText;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : *font -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionTextMessageStart::SetFontName( char const *font )
|
||
|
{
|
||
|
Q_strncpy( m_szVguiFont, font, sizeof( m_szVguiFont ) );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Output : char const
|
||
|
//-----------------------------------------------------------------------------
|
||
|
char const *CDemoActionTextMessageStart::GetFontName( void ) const
|
||
|
{
|
||
|
if ( !Q_strcasecmp( "TextMessageDefault", m_szVguiFont ) )
|
||
|
{
|
||
|
return "";
|
||
|
}
|
||
|
return m_szVguiFont;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : *pInitData -
|
||
|
// Output : Returns true on success, false on failure.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool CDemoActionTextMessageStart::Init( KeyValues *pInitData )
|
||
|
{
|
||
|
if ( !BaseClass::Init( pInitData ) )
|
||
|
return false;
|
||
|
|
||
|
message.fadein = pInitData->GetFloat( "fadein", 0.0f );
|
||
|
message.fadeout = pInitData->GetFloat( "fadeout", 0.0f );
|
||
|
message.holdtime = pInitData->GetFloat( "holdtime", 0.0f );
|
||
|
message.fxtime = pInitData->GetFloat( "fxtime", 0.0f );
|
||
|
|
||
|
message.x = pInitData->GetFloat( "x", 0 );
|
||
|
message.y = pInitData->GetFloat( "y", 0 );
|
||
|
|
||
|
SetMessageText( pInitData->GetString( "message", "" ) );
|
||
|
SetFontName( pInitData->GetString( "font", "" ) );
|
||
|
|
||
|
message.r1 = pInitData->GetInt( "r1", 255 );
|
||
|
message.g1 = pInitData->GetInt( "g1", 255 );
|
||
|
message.b1 = pInitData->GetInt( "b1", 255 );
|
||
|
message.a1 = pInitData->GetInt( "a1", 255 );
|
||
|
|
||
|
message.r2 = pInitData->GetInt( "r2", 255 );
|
||
|
message.g2 = pInitData->GetInt( "g2", 255 );
|
||
|
message.b2 = pInitData->GetInt( "b2", 255 );
|
||
|
message.a2 = pInitData->GetInt( "a2", 255 );
|
||
|
|
||
|
int fadeinout = pInitData->GetInt( "FADEINOUT", 0 );
|
||
|
int fadeinoutflicker = pInitData->GetInt( "FLICKER", 0 );
|
||
|
int fadewriteout = pInitData->GetInt( "WRITEOUT", 0 );
|
||
|
|
||
|
message.effect = 0;
|
||
|
|
||
|
if ( fadeinout )
|
||
|
{
|
||
|
message.effect = 0;
|
||
|
}
|
||
|
if ( fadeinoutflicker )
|
||
|
{
|
||
|
message.effect = 1;
|
||
|
}
|
||
|
if ( fadewriteout )
|
||
|
{
|
||
|
message.effect = 2;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Output : ScreenFade_t const
|
||
|
//-----------------------------------------------------------------------------
|
||
|
client_textmessage_t *CDemoActionTextMessageStart::GetTextMessage( void )
|
||
|
{
|
||
|
return &message;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionTextMessageStart::FireAction( void )
|
||
|
{
|
||
|
GetTextMessage()->pVGuiSchemeFontName = GetFontName();
|
||
|
|
||
|
TextMessage_DemoMessageFull( GetMessageText(), GetTextMessage() );
|
||
|
CL_HudMessage( (const char *)DEMO_MESSAGE );
|
||
|
SetFinishedAction( true );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : buf -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionTextMessageStart::SaveKeysToBuffer( int depth, CUtlBuffer& buf )
|
||
|
{
|
||
|
BaseClass::SaveKeysToBuffer( depth, buf );
|
||
|
|
||
|
client_textmessage_t const *tm = GetTextMessage();
|
||
|
|
||
|
int fadeinout = tm->effect == 0 ? 1 : 0;
|
||
|
int fadeinoutflicker = tm->effect == 1 ? 1 : 0;
|
||
|
int fadewriteout = tm->effect == 2 ? 1 : 0;
|
||
|
|
||
|
BufPrintf( depth, buf, "message \"%s\"\n", GetMessageText() );
|
||
|
BufPrintf( depth, buf, "font \"%s\"\n", GetFontName() );
|
||
|
|
||
|
BufPrintf( depth, buf, "fadein \"%.3f\"\n", tm->fadein );
|
||
|
BufPrintf( depth, buf, "fadeout \"%.3f\"\n", tm->fadeout );
|
||
|
BufPrintf( depth, buf, "holdtime \"%.3f\"\n", tm->holdtime );
|
||
|
BufPrintf( depth, buf, "fxtime \"%.3f\"\n", tm->fxtime );
|
||
|
|
||
|
if ( fadeinout > 0 ) BufPrintf( depth, buf, "FADEINOUT \"1\"\n" );
|
||
|
if ( fadeinoutflicker > 0 ) BufPrintf( depth, buf, "FLICKER \"1\"\n" );
|
||
|
if ( fadewriteout > 0 ) BufPrintf( depth, buf, "WRITEOUT \"1\"\n" );
|
||
|
|
||
|
BufPrintf( depth, buf, "x \"%f\"\n", tm->x );
|
||
|
BufPrintf( depth, buf, "y \"%f\"\n", tm->y );
|
||
|
|
||
|
BufPrintf( depth, buf, "r1 \"%i\"\n", tm->r1 );
|
||
|
BufPrintf( depth, buf, "g1 \"%i\"\n", tm->g1 );
|
||
|
BufPrintf( depth, buf, "b1 \"%i\"\n", tm->b1 );
|
||
|
BufPrintf( depth, buf, "a1 \"%i\"\n", tm->a1 );
|
||
|
|
||
|
BufPrintf( depth, buf, "r2 \"%i\"\n", tm->r2 );
|
||
|
BufPrintf( depth, buf, "g2 \"%i\"\n", tm->g2 );
|
||
|
BufPrintf( depth, buf, "b2 \"%i\"\n", tm->b2 );
|
||
|
BufPrintf( depth, buf, "a2 \"%i\"\n", tm->a2 );
|
||
|
|
||
|
}
|
||
|
#include "tier0/memdbgoff.h"
|
||
|
DECLARE_DEMOACTION( DEMO_ACTION_TEXTMESSAGE_START, CDemoActionTextMessageStart );
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : *pInitData -
|
||
|
// Output : Returns true on success, false on failure.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool CDemoActionCDTrackStart::Init( KeyValues *pInitData )
|
||
|
{
|
||
|
if ( !BaseClass::Init( pInitData ) )
|
||
|
return false;
|
||
|
|
||
|
SetTrack( pInitData->GetInt( "track", -1 ) );
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : track -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionCDTrackStart::SetTrack( int track )
|
||
|
{
|
||
|
m_nCDTrack = track;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Output : int
|
||
|
//-----------------------------------------------------------------------------
|
||
|
int CDemoActionCDTrackStart::GetTrack( void ) const
|
||
|
{
|
||
|
return m_nCDTrack;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionCDTrackStart::FireAction( void )
|
||
|
{
|
||
|
if ( GetTrack() != -1 )
|
||
|
{
|
||
|
#if 0
|
||
|
char szCommand[ 256 ];
|
||
|
Q_snprintf( szCommand, sizeof( szCommand ), "cd stop\ncd play %i\n", GetTrack() );
|
||
|
Cbuf_AddText( szCommand );
|
||
|
#endif
|
||
|
}
|
||
|
SetFinishedAction( true );
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : buf -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionCDTrackStart::SaveKeysToBuffer( int depth, CUtlBuffer& buf )
|
||
|
{
|
||
|
BaseClass::SaveKeysToBuffer( depth, buf );
|
||
|
|
||
|
BufPrintf( depth, buf, "track \"%i\"\n",
|
||
|
GetTrack() );
|
||
|
}
|
||
|
|
||
|
#include "tier0/memdbgoff.h"
|
||
|
DECLARE_DEMOACTION( DEMO_ACTION_PLAYCDTRACK_START, CDemoActionCDTrackStart );
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionCDTrackStop::FireAction( void )
|
||
|
{
|
||
|
#if 0
|
||
|
Cbuf_AddText( "cd stop\n" );
|
||
|
#endif
|
||
|
SetFinishedAction( true );
|
||
|
}
|
||
|
|
||
|
#include "tier0/memdbgoff.h"
|
||
|
DECLARE_DEMOACTION( DEMO_ACTION_PLAYCDTRACK_STOP, CDemoActionCDTrackStop );
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : *pInitData -
|
||
|
// Output : Returns true on success, false on failure.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool CDemoActionPlaySoundStart::Init( KeyValues *pInitData )
|
||
|
{
|
||
|
if ( !BaseClass::Init( pInitData ) )
|
||
|
return false;
|
||
|
|
||
|
SetSoundName( pInitData->GetString( "sound", "" ) );
|
||
|
|
||
|
// FIXME: Could add parsing of attenuation, other sound flags
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : *stream -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionPlaySoundStart::SetSoundName( char const *name )
|
||
|
{
|
||
|
Q_strncpy( m_szSoundName, name, sizeof( m_szSoundName ) );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Output : char
|
||
|
//-----------------------------------------------------------------------------
|
||
|
char const *CDemoActionPlaySoundStart::GetSoundName( void ) const
|
||
|
{
|
||
|
return m_szSoundName;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionPlaySoundStart::FireAction( void )
|
||
|
{
|
||
|
Vector vDummyOrigin;
|
||
|
vDummyOrigin.Init();
|
||
|
|
||
|
CSfxTable *pSound = (CSfxTable*)S_PrecacheSound(GetSoundName());
|
||
|
if ( pSound )
|
||
|
{
|
||
|
StartSoundParams_t params;
|
||
|
params.staticsound = false;
|
||
|
params.soundsource = cl.m_nViewEntity;
|
||
|
params.entchannel = CHAN_AUTO;
|
||
|
params.pSfx = pSound;
|
||
|
params.origin = vDummyOrigin;
|
||
|
params.fvol = 1.0f;
|
||
|
params.soundlevel = SNDLVL_IDLE;
|
||
|
params.flags = 0;
|
||
|
params.pitch = PITCH_NORM;
|
||
|
|
||
|
S_StartSound( params );
|
||
|
}
|
||
|
|
||
|
SetFinishedAction( true );
|
||
|
}
|
||
|
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : buf -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionPlaySoundStart::SaveKeysToBuffer( int depth, CUtlBuffer& buf )
|
||
|
{
|
||
|
BaseClass::SaveKeysToBuffer( depth, buf );
|
||
|
|
||
|
BufPrintf( depth, buf, "sound \"%s\"\n", GetSoundName() );
|
||
|
}
|
||
|
|
||
|
#include "tier0/memdbgoff.h"
|
||
|
DECLARE_DEMOACTION( DEMO_ACTION_PLAYSOUND_START, CDemoActionPlaySoundStart );
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : demoframe -
|
||
|
// demotime -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool CBaseDemoActionWithStopTime::Update( const DemoActionTimingContext& tc )
|
||
|
{
|
||
|
// Not active yet
|
||
|
if ( !BaseClass::Update( tc ) )
|
||
|
return false;
|
||
|
|
||
|
if ( GetActionFired() )
|
||
|
{
|
||
|
if ( m_bUsingStopTick )
|
||
|
{
|
||
|
if ( tc.curtick >= m_nStopTick )
|
||
|
{
|
||
|
SetFinishedAction( true );
|
||
|
}
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if ( tc.curtime >= m_flStopTime )
|
||
|
{
|
||
|
SetFinishedAction( true );
|
||
|
}
|
||
|
}
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : *pInitData -
|
||
|
// Output : Returns true on success, false on failure.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool CBaseDemoActionWithStopTime::Init( KeyValues *pInitData )
|
||
|
{
|
||
|
if ( !BaseClass::Init( pInitData ) )
|
||
|
return false;
|
||
|
|
||
|
SetStopTick( pInitData->GetInt( "stoptick", -1 ) );
|
||
|
SetStopTime( pInitData->GetFloat( "stoptime", -1.0f ) );
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : buf -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CBaseDemoActionWithStopTime::SaveKeysToBuffer( int depth, CUtlBuffer& buf )
|
||
|
{
|
||
|
BaseClass::SaveKeysToBuffer( depth, buf );
|
||
|
|
||
|
if ( m_nStopTick != -1 )
|
||
|
{
|
||
|
BufPrintf( depth, buf, "stoptick \"%i\"\n",
|
||
|
m_nStopTick );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
if ( m_flStopTime != -1.0f )
|
||
|
{
|
||
|
BufPrintf( depth, buf, "stoptime \"%.3f\"\n",
|
||
|
m_flStopTime );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : frame -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CBaseDemoActionWithStopTime::SetStopTick( int tick )
|
||
|
{
|
||
|
m_bUsingStopTick = tick != -1;
|
||
|
m_nStopTick = tick;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : t -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CBaseDemoActionWithStopTime::SetStopTime( float t )
|
||
|
{
|
||
|
m_bUsingStopTick = !( t != -1.0f );
|
||
|
m_flStopTime = t;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
CDemoActionChangePlaybackRate::CDemoActionChangePlaybackRate()
|
||
|
{
|
||
|
m_flPlaybackRate = 1.0f;
|
||
|
m_flSavePlaybackRate = 1.0f;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : *pInitData -
|
||
|
// Output : Returns true on success, false on failure.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool CDemoActionChangePlaybackRate::Init( KeyValues *pInitData )
|
||
|
{
|
||
|
if ( !BaseClass::Init( pInitData ) )
|
||
|
return false;
|
||
|
|
||
|
SetPlaybackRate( pInitData->GetFloat( "playbackrate", 1.0f ) );
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : buf -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionChangePlaybackRate::SaveKeysToBuffer( int depth, CUtlBuffer& buf )
|
||
|
{
|
||
|
BaseClass::SaveKeysToBuffer( depth, buf );
|
||
|
|
||
|
BufPrintf( depth, buf, "playbackrate \"%f\"\n", GetPlaybackRate() );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : frame -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionChangePlaybackRate::SetPlaybackRate( float rate )
|
||
|
{
|
||
|
m_flPlaybackRate = clamp( rate, 0.001f, 1000.0f );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : t -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
float CDemoActionChangePlaybackRate::GetPlaybackRate( void ) const
|
||
|
{
|
||
|
return m_flPlaybackRate;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionChangePlaybackRate::FireAction( void )
|
||
|
{
|
||
|
// m_flSavePlaybackRate = demoplayer->Get GetPlaybackRateModifier();
|
||
|
demoplayer->SetPlaybackTimeScale( m_flPlaybackRate );
|
||
|
SetActionFired( true );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionChangePlaybackRate::OnActionFinished( void )
|
||
|
{
|
||
|
// demo->SetPlaybackRateModifier( m_flSavePlaybackRate );
|
||
|
}
|
||
|
|
||
|
#include "tier0/memdbgoff.h"
|
||
|
DECLARE_DEMOACTION( DEMO_ACTION_CHANGEPLAYBACKRATE, CDemoActionChangePlaybackRate );
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
CDemoActionPausePlayback::CDemoActionPausePlayback()
|
||
|
{
|
||
|
m_flPauseTime = 0.0f;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : *pInitData -
|
||
|
// Output : Returns true on success, false on failure.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool CDemoActionPausePlayback::Init( KeyValues *pInitData )
|
||
|
{
|
||
|
if ( !BaseClass::Init( pInitData ) )
|
||
|
return false;
|
||
|
|
||
|
SetPauseTime( pInitData->GetFloat( "pausetime", 1.0f ) );
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : buf -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionPausePlayback::SaveKeysToBuffer( int depth, CUtlBuffer& buf )
|
||
|
{
|
||
|
BaseClass::SaveKeysToBuffer( depth, buf );
|
||
|
|
||
|
BufPrintf( depth, buf, "pausetime \"%f\"\n", GetPauseTime() );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : frame -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionPausePlayback::SetPauseTime( float t )
|
||
|
{
|
||
|
m_flPauseTime = clamp( t, 0.0f, 300.0f );
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : t -
|
||
|
//-----------------------------------------------------------------------------
|
||
|
float CDemoActionPausePlayback::GetPauseTime( void ) const
|
||
|
{
|
||
|
return m_flPauseTime;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
//-----------------------------------------------------------------------------
|
||
|
void CDemoActionPausePlayback::FireAction( void )
|
||
|
{
|
||
|
demoplayer->PausePlayback( GetPauseTime() );
|
||
|
SetActionFired( true );
|
||
|
}
|
||
|
|
||
|
#include "tier0/memdbgoff.h"
|
||
|
DECLARE_DEMOACTION( DEMO_ACTION_PAUSE, CDemoActionPausePlayback );
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
extern float scr_demo_override_fov;
|
||
|
extern float host_time;
|
||
|
|
||
|
CDemoActionZoom::CDemoActionZoom()
|
||
|
{
|
||
|
m_bSpline = false;
|
||
|
m_bStayout = false;
|
||
|
|
||
|
m_flFinalFOV = 0;
|
||
|
m_flFOVRateOut = 0; // degress per second
|
||
|
m_flFOVRateIn = 0; // degrees per second
|
||
|
m_flHoldTime = 0;
|
||
|
|
||
|
//
|
||
|
m_flFOVStartTime = 0;
|
||
|
m_flOriginalFOV = 0.0f;
|
||
|
}
|
||
|
|
||
|
bool CDemoActionZoom::Init( KeyValues *pInitData )
|
||
|
{
|
||
|
if ( !BaseClass::Init( pInitData ) )
|
||
|
return false;
|
||
|
|
||
|
m_bSpline = pInitData->GetInt( "spline", 1 ) ? true : false;
|
||
|
m_bStayout = pInitData->GetInt( "stayout", 1 ) ? true : false;
|
||
|
|
||
|
m_flFinalFOV = pInitData->GetFloat( "finalfov", 0.0f );
|
||
|
m_flFOVRateOut = pInitData->GetFloat( "fovrateout", 0.0f );
|
||
|
m_flFOVRateIn = pInitData->GetFloat( "fovratein", 0.0f );
|
||
|
m_flHoldTime = pInitData->GetFloat( "fovhold", 0.0f );
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose:
|
||
|
// Input : tc -
|
||
|
// Output : Returns true on success, false on failure.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
bool CDemoActionZoom::Update( const DemoActionTimingContext& tc )
|
||
|
{
|
||
|
// Not active yet
|
||
|
if ( !BaseClass::Update( tc ) )
|
||
|
return false;
|
||
|
|
||
|
if ( GetActionFired() )
|
||
|
{
|
||
|
// See if we're done yet
|
||
|
float elapsed = host_time - m_flFOVStartTime;
|
||
|
if ( elapsed > m_flFOVRateOut )
|
||
|
{
|
||
|
if ( m_bStayout )
|
||
|
{
|
||
|
scr_demo_override_fov = m_flFinalFOV;
|
||
|
SetFinishedAction( true );
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
float intime = m_flFOVRateOut + m_flHoldTime;
|
||
|
if ( elapsed <= intime )
|
||
|
{
|
||
|
// still going
|
||
|
scr_demo_override_fov = m_flFinalFOV;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
float finishtime = intime + m_flFOVRateIn;
|
||
|
if ( elapsed > finishtime )
|
||
|
{
|
||
|
// Finished now
|
||
|
scr_demo_override_fov = 0.0f;
|
||
|
SetFinishedAction( true );
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
float frac = 0.0f;
|
||
|
if ( m_flFOVRateIn > 0.0f )
|
||
|
{
|
||
|
frac = ( elapsed - intime ) / m_flFOVRateIn;
|
||
|
}
|
||
|
if ( m_bSpline )
|
||
|
{
|
||
|
frac = 3.0f * frac * frac - 2.0f * frac * frac * frac;
|
||
|
}
|
||
|
frac = clamp( frac, 0.0f, 1.0f );
|
||
|
|
||
|
frac = 1.0f - frac;
|
||
|
|
||
|
scr_demo_override_fov = m_flOriginalFOV + frac * ( m_flFinalFOV - m_flOriginalFOV );
|
||
|
}
|
||
|
else
|
||
|
{
|
||
|
float frac = 0.0f;
|
||
|
if ( m_flFOVRateOut > 0.0f )
|
||
|
{
|
||
|
frac = elapsed / m_flFOVRateOut;
|
||
|
}
|
||
|
if ( m_bSpline )
|
||
|
{
|
||
|
frac = 3.0f * frac * frac - 2.0f * frac * frac * frac;
|
||
|
}
|
||
|
frac = clamp( frac, 0.0f, 1.0f );
|
||
|
|
||
|
scr_demo_override_fov = m_flOriginalFOV + frac * ( m_flFinalFOV - m_flOriginalFOV );
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
void CDemoActionZoom::FireAction( void )
|
||
|
{
|
||
|
m_flOriginalFOV = g_EngineRenderer->GetFov();
|
||
|
scr_demo_override_fov = m_flOriginalFOV;
|
||
|
m_flFOVStartTime = host_time;
|
||
|
}
|
||
|
|
||
|
void CDemoActionZoom::SaveKeysToBuffer( int depth, CUtlBuffer& buf )
|
||
|
{
|
||
|
BaseClass::SaveKeysToBuffer( depth, buf );
|
||
|
|
||
|
BufPrintf( depth, buf, "spline \"%i\"\n",
|
||
|
m_bSpline ? 1 : 0 );
|
||
|
BufPrintf( depth, buf, "stayout \"%i\"\n",
|
||
|
m_bStayout ? 1 : 0 );
|
||
|
|
||
|
BufPrintf( depth, buf, "finalfov \"%f\"\n",
|
||
|
m_flFinalFOV );
|
||
|
BufPrintf( depth, buf, "fovrateout \"%f\"\n",
|
||
|
m_flFOVRateOut );
|
||
|
BufPrintf( depth, buf, "fovratein \"%f\"\n",
|
||
|
m_flFOVRateIn );
|
||
|
BufPrintf( depth, buf, "fovhold \"%f\"\n",
|
||
|
m_flHoldTime );
|
||
|
}
|
||
|
|
||
|
#include "tier0/memdbgoff.h"
|
||
|
DECLARE_DEMOACTION( DEMO_ACTION_ZOOM, CDemoActionZoom );
|
||
|
#include "tier0/memdbgon.h"
|