diff options
Diffstat (limited to 'sdklauncher/configs.cpp')
| -rw-r--r-- | sdklauncher/configs.cpp | 110 |
1 files changed, 110 insertions, 0 deletions
diff --git a/sdklauncher/configs.cpp b/sdklauncher/configs.cpp new file mode 100644 index 0000000..8c901c7 --- /dev/null +++ b/sdklauncher/configs.cpp @@ -0,0 +1,110 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: Handle addition and editing of game configurations +// +//=====================================================================================// + +#include <windows.h> +#include "interface.h" +#include "tier0/icommandline.h" +#include "filesystem_tools.h" +#include "sdklauncher_main.h" +#include "ConfigManager.h" +#include "KeyValues.h" + +#include <io.h> +#include <stdio.h> + +#include "configs.h" + +// memdbgon must be the last include file in a .cpp file!!! +#include <tier0/memdbgon.h> + +extern CGameConfigManager g_ConfigManager; + +//----------------------------------------------------------------------------- +// Purpose: Copy a character string into a utlvector of characters +//----------------------------------------------------------------------------- +void UtlStrcpy( CUtlVector<char> &dest, const char *pSrc ) +{ + dest.EnsureCount( strlen( pSrc ) + 1 ); + Q_strncpy( dest.Base(), pSrc, dest.Count() ); +} + +//----------------------------------------------------------------------------- +// Purpose: Return the path for the gamecfg.INI file +//----------------------------------------------------------------------------- +const char *GetIniFilePath( void ) +{ + static char iniFilePath[MAX_PATH] = {0}; + if ( iniFilePath[0] == 0 ) + { + Q_strncpy( iniFilePath, GetSDKLauncherBinDirectory(), sizeof( iniFilePath ) ); + Q_strncat( iniFilePath, "\\gamecfg.ini", sizeof( iniFilePath ), COPY_ALL_CHARACTERS ); + } + return iniFilePath; +} + +//----------------------------------------------------------------------------- +// Purpose: Add a new configuration with proper paths +// Output : Returns true on success, false on failure. +//----------------------------------------------------------------------------- + +// NOTE: This code is fairly fragile, it'd be a lot better to have a solid solution for adding in a new config + +bool AddConfig( const char *pModName, const char *pModDirectory, ModType_t modType ) +{ + // Manager must be loaded + if ( g_ConfigManager.IsLoaded() == false ) + return false; + + // Set to defaults + defaultConfigInfo_t newInfo; + memset( &newInfo, 0, sizeof( newInfo ) ); + + // Mod name + Q_strncpy( newInfo.gameName, pModName, sizeof( newInfo.gameName ) ); + + // Basic FGD + if ( modType == ModType_HL2 ) + { + Q_strncpy( newInfo.FGD, "halflife2.fgd", sizeof( newInfo.FGD ) ); + } + else if ( modType == ModType_HL2_Multiplayer ) + { + Q_strncpy( newInfo.FGD, "hl2mp.fgd", sizeof( newInfo.FGD ) ); + } + else + { + Q_strncpy( newInfo.FGD, "base.fgd", sizeof( newInfo.FGD ) ); + } + + // Get the base directory + Q_FileBase( pModDirectory, newInfo.gameDir, sizeof( newInfo.gameDir ) ); + + KeyValues *gameBlock = g_ConfigManager.GetGameBlock(); + + // Default executable + Q_strncpy( newInfo.exeName, "hl2.exe", sizeof( newInfo.exeName ) ); + + char szPath[MAX_PATH]; + Q_strncpy( szPath, pModDirectory, sizeof( szPath ) ); + Q_StripLastDir( szPath, sizeof( szPath ) ); + Q_StripTrailingSlash( szPath ); + + char fullDir[MAX_PATH]; + g_ConfigManager.GetRootGameDirectory( fullDir, sizeof( fullDir ), g_ConfigManager.GetRootDirectory() ); + + // Add the config into our file + g_ConfigManager.AddDefaultConfig( newInfo, gameBlock, szPath, fullDir ); + + // Set this as the currently active configuration + SetVConfigRegistrySetting( GAMEDIR_TOKEN, pModDirectory ); + + // Save and reload our configs + g_ConfigManager.SaveConfigs(); + g_ConfigManager.LoadConfigs(); + + return true; +} + |