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.
131 lines
3.6 KiB
131 lines
3.6 KiB
5 years ago
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
//=======================================================================================//
|
||
|
|
||
|
#include "replay/replayutils.h"
|
||
|
#include "dbg.h"
|
||
|
#include "strtools.h"
|
||
|
#include "qlimits.h"
|
||
|
#include "filesystem.h"
|
||
|
#include "replay/replaytime.h"
|
||
|
#include "fmtstr.h"
|
||
|
|
||
|
// memdbgon must be the last include file in a .cpp file!!!
|
||
|
#include "tier0/memdbgon.h"
|
||
|
|
||
|
//----------------------------------------------------------------------------------------
|
||
|
|
||
|
static char gs_szGameDir[MAX_OSPATH];
|
||
|
|
||
|
//----------------------------------------------------------------------------------------
|
||
|
|
||
|
void Replay_GetFirstAvailableFilename( char *pDst, int nDstLen, const char *pIdealFilename, const char *pExt,
|
||
|
const char *pFilePath, int nStartIndex )
|
||
|
{
|
||
|
// Strip extension from ideal filename
|
||
|
char szIdealFilename[ MAX_OSPATH ];
|
||
|
V_StripExtension( pIdealFilename, szIdealFilename, sizeof( szIdealFilename ) );
|
||
|
|
||
|
int i = nStartIndex;
|
||
|
while ( 1 )
|
||
|
{
|
||
|
V_strncpy( pDst, szIdealFilename, nDstLen );
|
||
|
V_strcat( pDst, Replay_va( "_%i%s", i, pExt ), nDstLen );
|
||
|
|
||
|
// Get a potential working path/filename
|
||
|
CFmtStr fmtTestFilename(
|
||
|
"%s%c%s",
|
||
|
pFilePath,
|
||
|
CORRECT_PATH_SEPARATOR,
|
||
|
pDst
|
||
|
);
|
||
|
|
||
|
// Make sure slashes are correct for platform
|
||
|
V_FixSlashes( fmtTestFilename.Access() );
|
||
|
|
||
|
// Fix up double slashes
|
||
|
V_FixDoubleSlashes( fmtTestFilename.Access() );
|
||
|
|
||
|
if ( !g_pFullFileSystem->FileExists( fmtTestFilename ) )
|
||
|
break;
|
||
|
|
||
|
++i;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------------------
|
||
|
|
||
|
void Replay_ConstructReplayFilenameString( CUtlString &strOut, const char *pReplaySubDir, const char *pFilename, const char *pGameDir )
|
||
|
{
|
||
|
// Construct full filename
|
||
|
strOut.Format( "%s%creplays%c%s%c%s", pGameDir,
|
||
|
CORRECT_PATH_SEPARATOR, CORRECT_PATH_SEPARATOR, pReplaySubDir,
|
||
|
CORRECT_PATH_SEPARATOR, pFilename
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------------------
|
||
|
|
||
|
char *Replay_va( const char *format, ... )
|
||
|
{
|
||
|
va_list argptr;
|
||
|
static char string[8][512];
|
||
|
static int curstring = 0;
|
||
|
|
||
|
curstring = ( curstring + 1 ) % 8;
|
||
|
|
||
|
va_start (argptr, format);
|
||
|
Q_vsnprintf( string[curstring], sizeof( string[curstring] ), format, argptr );
|
||
|
va_end (argptr);
|
||
|
|
||
|
return string[curstring];
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------------------
|
||
|
|
||
|
void Replay_SetGameDir( const char *pGameDir )
|
||
|
{
|
||
|
V_strcpy( gs_szGameDir, pGameDir );
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------------------
|
||
|
|
||
|
const char *Replay_GetGameDir()
|
||
|
{
|
||
|
return gs_szGameDir;
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------------------
|
||
|
|
||
|
const char *Replay_GetBaseDir()
|
||
|
{
|
||
|
return Replay_va(
|
||
|
"%s%creplays%c",
|
||
|
Replay_GetGameDir(),
|
||
|
CORRECT_PATH_SEPARATOR,
|
||
|
CORRECT_PATH_SEPARATOR
|
||
|
);
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------------------
|
||
|
|
||
|
void Replay_GetAutoName( wchar_t *pDest, int nDestSize, const char *pMapName )
|
||
|
{
|
||
|
// Get date/time
|
||
|
CReplayTime now;
|
||
|
now.InitDateAndTimeToNow();
|
||
|
|
||
|
// Convert map name to unicode
|
||
|
wchar_t wszMapName[256];
|
||
|
extern vgui::ILocalize *g_pVGuiLocalize;
|
||
|
g_pVGuiLocalize->ConvertANSIToUnicode( pMapName, wszMapName, sizeof( wszMapName ) );
|
||
|
|
||
|
// Get localized date as string
|
||
|
const wchar_t *pLocalizedDate = CReplayTime::GetLocalizedDate( g_pVGuiLocalize, now, true );
|
||
|
|
||
|
// Create title
|
||
|
g_pVGuiLocalize->ConstructString( pDest, nDestSize, L"%s1: %s2", 2, wszMapName, pLocalizedDate );
|
||
|
}
|
||
|
|
||
|
//----------------------------------------------------------------------------------------
|