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.
130 lines
3.6 KiB
130 lines
3.6 KiB
//========= 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 ); |
|
} |
|
|
|
//----------------------------------------------------------------------------------------
|
|
|