|
|
//====== Copyright � 1996-2005, Valve Corporation, All rights reserved. =======
//
// Purpose:
//
//=============================================================================
#include "stdafx.h"
#include "scriplib.h"
#include "choreoscene.h"
#include "iscenetokenprocessor.h"
#include "filesystem_tools.h"
//-----------------------------------------------------------------------------
// Purpose: Helper to scene module for parsing the .vcd file
//-----------------------------------------------------------------------------
class CSceneTokenProcessor : public ISceneTokenProcessor { public: const char *CurrentToken( void ); bool GetToken( bool crossline ); bool TokenAvailable( void ); void Error( const char *fmt, ... ); };
//-----------------------------------------------------------------------------
// Purpose:
// Output : const
//-----------------------------------------------------------------------------
const char *CSceneTokenProcessor::CurrentToken( void ) { return token; }
//-----------------------------------------------------------------------------
// Purpose:
// Input : crossline -
// Output : Returns true on success, false on failure.
//-----------------------------------------------------------------------------
bool CSceneTokenProcessor::GetToken( bool crossline ) { return ::GetToken( crossline ) ? true : false; }
//-----------------------------------------------------------------------------
// Purpose:
// Output : Returns true on success, false on failure.
//-----------------------------------------------------------------------------
bool CSceneTokenProcessor::TokenAvailable( void ) { return ::TokenAvailable() ? true : false; }
//-----------------------------------------------------------------------------
// Purpose:
// Input : *fmt -
// ... -
//-----------------------------------------------------------------------------
void CSceneTokenProcessor::Error( const char *fmt, ... ) { char string[ 2048 ]; va_list argptr; va_start( argptr, fmt ); vsprintf( string, fmt, argptr ); va_end( argptr );
Warning( "%s", string ); }
static CSceneTokenProcessor g_TokenProcessor;
//-----------------------------------------------------------------------------
// Purpose: Normally implemented in cmdlib.cpp but we don't want that in Hammer.
//-----------------------------------------------------------------------------
char *ExpandPath (char *path) { static char fullpath[ 512 ]; g_pFullFileSystem->RelativePathToFullPath( path, "GAME", fullpath, sizeof( fullpath ) ); return fullpath; }
//-----------------------------------------------------------------------------
// Purpose: Normally implemented in cmdlib.cpp but we don't want that in Hammer.
//-----------------------------------------------------------------------------
int LoadFile( const char *filename, void **bufferptr ) { FileHandle_t f = g_pFullFileSystem->Open( filename, "rb" ); if ( FILESYSTEM_INVALID_HANDLE != f ) { int length = g_pFullFileSystem->Size( f ); void *buffer = malloc (length+1); ((char *)buffer)[length] = 0; g_pFullFileSystem->Read( buffer, length, f ); g_pFullFileSystem->Close (f); *bufferptr = buffer; return length; } else { *bufferptr = NULL; return 0; } }
CChoreoScene* HammerLoadScene( const char *pFilename ) { if ( g_pFullFileSystem->FileExists( pFilename ) ) { LoadScriptFile( (char*)pFilename ); CChoreoScene *scene = ChoreoLoadScene( pFilename, NULL, &g_TokenProcessor, Msg ); return scene; }
return NULL; }
bool GetFirstSoundInScene( const char *pSceneFilename, char *pSoundName, int soundNameLen ) { CChoreoScene *pScene = HammerLoadScene( pSceneFilename ); if ( !pScene ) return false; for ( int i = 0; i < pScene->GetNumEvents(); i++ ) { CChoreoEvent *e = pScene->GetEvent( i ); if ( !e || e->GetType() != CChoreoEvent::SPEAK ) continue;
const char *pParameters = e->GetParameters(); V_strncpy( pSoundName, pParameters, soundNameLen ); delete pScene; return true; } delete pScene; return false; }
|