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.
217 lines
6.7 KiB
217 lines
6.7 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
//=============================================================================// |
|
|
|
#ifndef FILESYSTEM_INIT_H |
|
#define FILESYSTEM_INIT_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
|
|
#include "filesystem.h" |
|
|
|
|
|
// If this option is on the command line, then filesystem_init won't bring up the vconfig |
|
// dialog even if FS_ERRORMODE_VCONFIG is used. |
|
#define CMDLINEOPTION_NOVCONFIG "-NoVConfig" |
|
|
|
#define GAMEDIR_TOKEN "VProject" |
|
|
|
|
|
#if defined( _WIN32 ) || defined( WIN32 ) |
|
#define PATHSEPARATOR(c) ((c) == '\\' || (c) == '/') |
|
#else //_WIN32 |
|
#define PATHSEPARATOR(c) ((c) == '/') |
|
#endif //_WIN32 |
|
|
|
|
|
enum FSReturnCode_t |
|
{ |
|
FS_OK, |
|
FS_MISSING_GAMEINFO_FILE, |
|
FS_INVALID_GAMEINFO_FILE, |
|
FS_INVALID_PARAMETERS, |
|
FS_UNABLE_TO_INIT, |
|
FS_MISSING_STEAM_DLL |
|
}; |
|
|
|
|
|
enum FSErrorMode_t |
|
{ |
|
FS_ERRORMODE_AUTO, // Call Error() in case of an error. |
|
FS_ERRORMODE_VCONFIG, // Call Error() for errors and run vconfig when appropriate. |
|
FS_ERRORMODE_NONE, // Just return FSReturnCode values and setup the string for FileSystem_GetLastErrorString. |
|
}; |
|
|
|
|
|
class CFSSteamSetupInfo |
|
{ |
|
public: |
|
CFSSteamSetupInfo(); |
|
|
|
// Inputs. |
|
public: |
|
// If this is set, then the init code will look in this directory up to the root for gameinfo.txt. |
|
// It must be set for FileSystem_LoadSearchPaths to work. |
|
// |
|
// (default: null) |
|
const char *m_pDirectoryName; |
|
|
|
// If this is true, then it won't look at -vproject, -game, or the vproject environment variable |
|
// to find gameinfo.txt. If this is true, then m_pDirectoryName must be set. |
|
// |
|
// (default: false) |
|
bool m_bOnlyUseDirectoryName; |
|
|
|
// If this is true, then: |
|
// 1. It will set the environment variables that steam.dll looks at for startup info. |
|
// 2. It will look for ToolsAppId in the gameinfo.txt file and load the |
|
// steam caches associated with that cache if it's there. This is so apps like Hammer and hlmv |
|
// can load the main steam caches (like for Counter-Strike or Half-Life 2), and also load the |
|
// caches that include tools-specific materials (materials\editor, materials\debug, etc). |
|
// |
|
// (default: true - should be FALSE for the engine) |
|
bool m_bToolsMode; |
|
|
|
// If this is true, and m_bToolsMode is false, then it will append the path to steam.dll to the |
|
// PATH environment variable. This makes it so you can run the engine under Steam without |
|
// having to copy steam.dll up into your hl2.exe folder. |
|
// (default: false) |
|
bool m_bSetSteamDLLPath; |
|
|
|
// Are we loading the Steam filesystem? This should be the same value that |
|
// FileSystem_GetFileSystemDLLName gave you. |
|
bool m_bSteam; |
|
|
|
// If this is true, then it won't look for a gameinfo.txt. |
|
// |
|
// (default: false) |
|
bool m_bNoGameInfo; |
|
|
|
// Outputs (if it returns FS_OK). |
|
public: |
|
char m_GameInfoPath[512]; // The directory that gameinfo.txt lives in. |
|
}; |
|
|
|
|
|
class CFSLoadModuleInfo : public CFSSteamSetupInfo |
|
{ |
|
public: |
|
CFSLoadModuleInfo(); |
|
|
|
// Inputs. |
|
public: |
|
// Full path to the file system DLL (gotten from FileSystem_GetFileSystemDLLName). |
|
const char *m_pFileSystemDLLName; |
|
|
|
// Passed to IFileSystem::Connect. |
|
CreateInterfaceFn m_ConnectFactory; |
|
|
|
// Outputs (if it returns FS_OK). |
|
public: |
|
// The filesystem you got from FileSystem_LoadFileSystemModule. |
|
IFileSystem *m_pFileSystem; |
|
CSysModule *m_pModule; |
|
}; |
|
|
|
|
|
class CFSMountContentInfo |
|
{ |
|
public: |
|
CFSMountContentInfo(); |
|
|
|
// Inputs. |
|
public: |
|
|
|
// See CFSLoadModuleInfo::m_bToolsMode (this valid should always be the same as you passed to CFSLoadModuleInfo::m_bToolsMode). |
|
bool m_bToolsMode; |
|
|
|
// This specifies the directory where gameinfo.txt is. This must be set. |
|
// It can come from CFSLoadModuleInfo::m_GameInfoPath. |
|
const char *m_pDirectoryName; |
|
|
|
// Gotten from CFSLoadModuleInfo::m_pFileSystem. |
|
IFileSystem *m_pFileSystem; |
|
}; |
|
|
|
|
|
class CFSSearchPathsInit |
|
{ |
|
public: |
|
CFSSearchPathsInit(); |
|
|
|
// Inputs. |
|
public: |
|
// This specifies the directory where gameinfo.txt is. This must be set. |
|
const char *m_pDirectoryName; |
|
|
|
// If this is set, then any search paths with a _english will be replaced with _m_pLanguage and added before the |
|
// _english path |
|
// (default: null) |
|
const char *m_pLanguage; |
|
|
|
// This is the filesystem FileSystem_LoadSearchPaths is talking to. |
|
IFileSystem *m_pFileSystem; |
|
|
|
bool m_bMountHDContent; |
|
bool m_bLowViolence; |
|
|
|
// Outputs. |
|
public: |
|
// This is the location of the first search path called "game", which also becomes your "mod" search path. |
|
char m_ModPath[512]; |
|
}; |
|
|
|
|
|
const char *GetVProjectCmdLineValue(); |
|
|
|
|
|
// Call this to use a bin directory relative to VPROJECT |
|
void FileSystem_UseVProjectBinDir( bool bEnable ); |
|
|
|
// This is used by all things that use the application framework: |
|
// Note that the application framework automatically takes care of step 1 if you use CSteamApplication. |
|
// Step 1: Ask filesystem_init for the name of the filesystem DLL to load |
|
FSReturnCode_t FileSystem_GetFileSystemDLLName( char *pFileSystemDLL, int nMaxLen, bool &bSteam ); |
|
|
|
// Step 2: Use filesystem framework to load/connect/init that filesystem DLL |
|
// -or- just set up the steam environment and get back the gameinfo.txt path |
|
// The second method is used by the application framework, which wants to connect/init the filesystem itself |
|
FSReturnCode_t FileSystem_LoadFileSystemModule( CFSLoadModuleInfo &info ); |
|
FSReturnCode_t FileSystem_SetupSteamEnvironment( CFSSteamSetupInfo &info ); |
|
|
|
// Step 3: Ask filesystem_init to set up the executable search path, and mount the steam content based on the mod gameinfo.txt file |
|
FSReturnCode_t FileSystem_MountContent( CFSMountContentInfo &fsInfo ); |
|
|
|
// Step 4: Load the search paths out of pGameDirectory\gameinfo.txt. |
|
FSReturnCode_t FileSystem_LoadSearchPaths( CFSSearchPathsInit &initInfo ); |
|
|
|
// This is automatically done during step 3, but if you want to redo all the search |
|
// paths (like Hammer does), you can call this to reset executable_path. |
|
FSReturnCode_t FileSystem_SetBasePaths( IFileSystem *pFileSystem ); |
|
|
|
// Utility function to add the PLATFORM search path. |
|
void FileSystem_AddSearchPath_Platform( IFileSystem *pFileSystem, const char *szGameInfoPath ); |
|
|
|
// See FSErrorMode_t. If you don't specify one here, then the default is FS_ERRORMODE_VCONFIG. |
|
void FileSystem_SetErrorMode( FSErrorMode_t errorMode = FS_ERRORMODE_VCONFIG ); |
|
|
|
bool FileSystem_GetExecutableDir( char *exedir, int exeDirLen ); |
|
|
|
// Clear SteamAppUser, SteamUserPassphrase, and SteamAppId from this process's environment. |
|
// TODO: always do this after LoadFileSysteModule.. there's no reason it should be |
|
// in the environment. |
|
void FileSystem_ClearSteamEnvVars(); |
|
|
|
// Find the steam.cfg above you for optional stuff |
|
FSReturnCode_t GetSteamCfgPath( char *steamCfgPath, int steamCfgPathLen ); |
|
|
|
// Returns the last error. |
|
const char *FileSystem_GetLastErrorString(); |
|
|
|
void Q_getwd( char *out, int outSize ); |
|
|
|
#endif // FILESYSTEM_INIT_H
|
|
|