You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
163 lines
4.1 KiB
163 lines
4.1 KiB
//====== Copyright © 1996-2007, Valve Corporation, All rights reserved. =======
|
|
//
|
|
// Purpose: VGUI panel which can play back video, in-engine
|
|
//
|
|
//=============================================================================
|
|
|
|
#include "cbase.h"
|
|
#include "vgui_hudvideo.h"
|
|
|
|
// memdbgon must be the last include file in a .cpp file!!!
|
|
#include "tier0/memdbgon.h"
|
|
|
|
using namespace vgui;
|
|
|
|
|
|
#define BIK_MEDIA_FOLDER "media/"
|
|
#define BIK_EXTENTION ".bik"
|
|
|
|
|
|
HUDVideoPanel::HUDVideoPanel( vgui::Panel *parent, const char *name ) :
|
|
BaseClass( 0, 0, 32, 32 )
|
|
{
|
|
SetParent( parent );
|
|
SetName( name );
|
|
|
|
m_bStopAllSounds = false;
|
|
m_nAllowInterruption = 0;
|
|
|
|
m_szLoopVideo[ 0 ] = '\0';
|
|
m_szLastTempVideo[ 0 ] = '\0';
|
|
|
|
m_nNumLoopAlternatives = 0;
|
|
m_fAlternateChance = 1.0f;
|
|
m_bIsLoopVideo = true;
|
|
m_bIsTransition = false;
|
|
}
|
|
|
|
void HUDVideoPanel::Paint( void )
|
|
{
|
|
BaseClass::Paint();
|
|
|
|
if ( !m_bStarted )
|
|
{
|
|
BeginPlayback( VarArgs( BIK_MEDIA_FOLDER "%s" BIK_EXTENTION, m_szLoopVideo ) );
|
|
}
|
|
}
|
|
|
|
void HUDVideoPanel::Activate( void )
|
|
{
|
|
SetVisible( true );
|
|
SetEnabled( true );
|
|
}
|
|
|
|
void HUDVideoPanel::DoModal( void )
|
|
{
|
|
Activate();
|
|
}
|
|
|
|
void HUDVideoPanel::OnVideoOver()
|
|
{
|
|
if ( m_bIsTransition )
|
|
{
|
|
m_bIsTransition = false;
|
|
BeginPlayback( VarArgs( BIK_MEDIA_FOLDER "%s" BIK_EXTENTION, m_szLastTempVideo ) );
|
|
}
|
|
else if ( !m_bIsLoopVideo )
|
|
{
|
|
m_bIsLoopVideo = true;
|
|
BeginPlayback( VarArgs( BIK_MEDIA_FOLDER "%s" BIK_EXTENTION, m_szLoopVideo ) );
|
|
}
|
|
else if ( m_nNumLoopAlternatives > 0 && RandomFloat() < m_fAlternateChance )
|
|
{
|
|
char szAltName[ FILENAME_MAX ];
|
|
Q_snprintf( szAltName, sizeof( szAltName ), "%s_alt%02i", m_szLoopVideo, RandomInt( 0, m_nNumLoopAlternatives - 1 ) );
|
|
PlayTempVideo( szAltName );
|
|
}
|
|
else
|
|
{
|
|
bik->SetFrame( m_BIKHandle, 0.0f );
|
|
}
|
|
}
|
|
|
|
void HUDVideoPanel::ReturnToLoopVideo( void )
|
|
{
|
|
if ( !m_bIsLoopVideo )
|
|
{
|
|
m_bIsLoopVideo = true;
|
|
BeginPlayback( VarArgs( BIK_MEDIA_FOLDER "%s" BIK_EXTENTION, m_szLoopVideo ) );
|
|
}
|
|
}
|
|
|
|
void HUDVideoPanel::PlayTempVideo( const char *pFilename, const char *pTransitionFilename /*= NULL*/ )
|
|
{
|
|
if ( !pFilename || Q_strcmp( GetCurrentVideo(), pFilename ) == 0 )
|
|
{
|
|
return;
|
|
}
|
|
|
|
Q_strncpy( m_szLastTempVideo, pFilename, sizeof( m_szLastTempVideo ) );
|
|
|
|
m_bIsLoopVideo = false;
|
|
|
|
m_bIsTransition = ( pTransitionFilename != NULL && pTransitionFilename[ 0 ] != '\0' );
|
|
|
|
BeginPlayback( VarArgs( BIK_MEDIA_FOLDER "%s" BIK_EXTENTION, ( m_bIsTransition ? pTransitionFilename : m_szLastTempVideo ) ) );
|
|
}
|
|
|
|
void HUDVideoPanel::SetLoopVideo( const char *pFilename, int nNumLoopAlternatives /*= 0*/, float fAlternateChance /*= 1.0f*/ )
|
|
{
|
|
m_nNumLoopAlternatives = nNumLoopAlternatives;
|
|
m_fAlternateChance = fAlternateChance;
|
|
|
|
if ( !pFilename || Q_strcmp( m_szLoopVideo, pFilename ) == 0 )
|
|
{
|
|
return;
|
|
}
|
|
|
|
Q_strncpy( m_szLoopVideo, pFilename, sizeof( m_szLoopVideo ) );
|
|
|
|
if ( m_bIsLoopVideo && m_bStarted )
|
|
{
|
|
BeginPlayback( VarArgs( BIK_MEDIA_FOLDER "%s" BIK_EXTENTION, m_szLoopVideo ) );
|
|
}
|
|
}
|
|
|
|
const char* HUDVideoPanel::GetCurrentVideo( void ) const
|
|
{
|
|
return ( m_bIsLoopVideo ? GetLoopVideo() : GetLastTempVideo() );
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------
|
|
// Purpose: Create and playback a video in a panel
|
|
//-----------------------------------------------------------------------------
|
|
HUDVideoPanel *HUDVideoPanel_Create( vgui::Panel *pParent,
|
|
unsigned int iWide, unsigned int iTall,
|
|
const char *pVideoFilename,
|
|
const char *pExitCommand /*= NULL*/,
|
|
float flFadeInTime /*= 1*/,
|
|
bool bLoop /*= false*/,
|
|
bool bPreloadVideo /*= false*/ )
|
|
{
|
|
// Create the base video panel
|
|
HUDVideoPanel *pVideoPanel = new HUDVideoPanel( pParent, "HUDVideoPanel" );
|
|
if ( pVideoPanel == NULL )
|
|
return NULL;
|
|
|
|
pVideoPanel->SetSize( iWide, iTall );
|
|
pVideoPanel->SetExitCommand( pExitCommand );
|
|
pVideoPanel->SetFadeInTime( flFadeInTime );
|
|
pVideoPanel->SetLooping( bLoop );
|
|
pVideoPanel->SetIsTransitionVideo( false );
|
|
//pVideoPanel->SetShouldPreload ( bPreloadVideo );
|
|
|
|
// Start it going
|
|
if ( pVideoPanel->BeginPlayback( pVideoFilename ) == false )
|
|
{
|
|
delete pVideoPanel;
|
|
return NULL;
|
|
}
|
|
|
|
|
|
return pVideoPanel;
|
|
}
|