215 lines
7.1 KiB
C++
215 lines
7.1 KiB
C++
//========= 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
|