diff options
Diffstat (limited to 'replay/common/replayutils.cpp')
| -rw-r--r-- | replay/common/replayutils.cpp | 130 |
1 files changed, 130 insertions, 0 deletions
diff --git a/replay/common/replayutils.cpp b/replay/common/replayutils.cpp new file mode 100644 index 0000000..e8d63d5 --- /dev/null +++ b/replay/common/replayutils.cpp @@ -0,0 +1,130 @@ +//========= 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 ); +} + +//---------------------------------------------------------------------------------------- |