void Interfaces::Load(CreateInterfaceFn interfaceFactory, CreateInterfaceFn gameServerFactory) { ConnectTier1Libraries(&interfaceFactory, 1); ConnectTier2Libraries(&interfaceFactory, 1); ConnectTier3Libraries(&interfaceFactory, 1); vguiLibrariesAvailable = vgui::VGui_InitInterfacesList("ExternalExtensions", &interfaceFactory, 1); pEngineClient = (IVEngineClient *)interfaceFactory(VENGINE_CLIENT_INTERFACE_VERSION, nullptr); pEngineTool = (IEngineTool *)interfaceFactory(VENGINETOOL_INTERFACE_VERSION, nullptr); pGameEventManager = (IGameEventManager2 *)interfaceFactory(INTERFACEVERSION_GAMEEVENTSMANAGER2, nullptr); pModelInfoClient = (IVModelInfoClient *)interfaceFactory(VMODELINFO_CLIENT_INTERFACE_VERSION, nullptr); pRenderView = (IVRenderView *)interfaceFactory(VENGINE_RENDERVIEW_INTERFACE_VERSION, nullptr); CreateInterfaceFn gameClientFactory; pEngineTool->GetClientFactory(gameClientFactory); pClientDLL = (IBaseClientDLL*)gameClientFactory(CLIENT_DLL_INTERFACE_VERSION, nullptr); pClientEntityList = (IClientEntityList*)gameClientFactory(VCLIENTENTITYLIST_INTERFACE_VERSION, nullptr); pSteamAPIContext = new CSteamAPIContext(); steamLibrariesAvailable = SteamAPI_InitSafe() && pSteamAPIContext->Init(); g_pEntityList = dynamic_cast<CBaseEntityList *>(Interfaces::pClientEntityList); char dll[MAX_PATH]; bool steam; if (FileSystem_GetFileSystemDLLName(dll, sizeof(dll), steam) == FS_OK) { CFSLoadModuleInfo fsLoadModuleInfo; fsLoadModuleInfo.m_bSteam = steam; fsLoadModuleInfo.m_pFileSystemDLLName = dll; fsLoadModuleInfo.m_ConnectFactory = interfaceFactory; if (FileSystem_LoadFileSystemModule(fsLoadModuleInfo) == FS_OK) { CFSMountContentInfo fsMountContentInfo; fsMountContentInfo.m_bToolsMode = fsLoadModuleInfo.m_bToolsMode; fsMountContentInfo.m_pDirectoryName = fsLoadModuleInfo.m_GameInfoPath; fsMountContentInfo.m_pFileSystem = fsLoadModuleInfo.m_pFileSystem; if (FileSystem_MountContent(fsMountContentInfo) == FS_OK) { CFSSearchPathsInit fsSearchPathsInit; fsSearchPathsInit.m_pDirectoryName = fsLoadModuleInfo.m_GameInfoPath; fsSearchPathsInit.m_pFileSystem = fsLoadModuleInfo.m_pFileSystem; if (FileSystem_LoadSearchPaths(fsSearchPathsInit) == FS_OK) { Interfaces::pFileSystem = fsLoadModuleInfo.m_pFileSystem; } } } } }
//----------------------------------------------------------------------------- // Create necessary interfaces //----------------------------------------------------------------------------- bool CSteamApplication::Create() { FileSystem_SetErrorMode( FS_ERRORMODE_AUTO ); char pFileSystemDLL[MAX_PATH]; if ( FileSystem_GetFileSystemDLLName( pFileSystemDLL, MAX_PATH, m_bSteam ) != FS_OK ) return false; FileSystem_SetupSteamInstallPath(); // Add in the cvar factory AppModule_t cvarModule = LoadModule( VStdLib_GetICVarFactory() ); AddSystem( cvarModule, CVAR_INTERFACE_VERSION ); AppModule_t fileSystemModule = LoadModule( pFileSystemDLL ); m_pFileSystem = (IFileSystem*)AddSystem( fileSystemModule, FILESYSTEM_INTERFACE_VERSION ); if ( !m_pFileSystem ) { Error( "Unable to load %s", pFileSystemDLL ); return false; } return true; }
bool FileSystem_Init_Normal( const char *pFilename, FSInitType_t initType, bool bOnlyUseDirectoryName ) { if ( initType == FS_INIT_FULL ) { // First, get the name of the module char fileSystemDLLName[MAX_PATH]; bool bSteam; if ( FileSystem_GetFileSystemDLLName( fileSystemDLLName, MAX_PATH, bSteam ) != FS_OK ) return false; // If we're under Steam we need extra setup to let us find the proper modules FileSystem_SetupSteamInstallPath(); // Next, load the module, call Connect/Init. CFSLoadModuleInfo loadModuleInfo; loadModuleInfo.m_pFileSystemDLLName = fileSystemDLLName; loadModuleInfo.m_pDirectoryName = pFilename; loadModuleInfo.m_bOnlyUseDirectoryName = bOnlyUseDirectoryName; loadModuleInfo.m_ConnectFactory = Sys_GetFactoryThis(); loadModuleInfo.m_bSteam = bSteam; loadModuleInfo.m_bToolsMode = true; if ( FileSystem_LoadFileSystemModule( loadModuleInfo ) != FS_OK ) return false; // Next, mount the content CFSMountContentInfo mountContentInfo; mountContentInfo.m_pDirectoryName= loadModuleInfo.m_GameInfoPath; mountContentInfo.m_pFileSystem = loadModuleInfo.m_pFileSystem; mountContentInfo.m_bToolsMode = true; if ( FileSystem_MountContent( mountContentInfo ) != FS_OK ) return false; // Finally, load the search paths. CFSSearchPathsInit searchPathsInit; searchPathsInit.m_pDirectoryName = loadModuleInfo.m_GameInfoPath; searchPathsInit.m_pFileSystem = loadModuleInfo.m_pFileSystem; if ( FileSystem_LoadSearchPaths( searchPathsInit ) != FS_OK ) return false; // Store the data we got from filesystem_init. g_pFileSystem = g_pFullFileSystem = loadModuleInfo.m_pFileSystem; g_pFullFileSystemModule = loadModuleInfo.m_pModule; FileSystem_AddSearchPath_Platform( g_pFullFileSystem, loadModuleInfo.m_GameInfoPath ); // Set qdir. if ( !pFilename ) pFilename = "."; Q_MakeAbsolutePath( qdir, sizeof( qdir ), pFilename, NULL ); Q_StripFilename( qdir ); strlwr( qdir ); if ( qdir[0] != 0 ) Q_AppendSlash( qdir, sizeof( qdir ) ); // Set gamedir. Q_MakeAbsolutePath( gamedir, sizeof( gamedir ), loadModuleInfo.m_GameInfoPath ); Q_AppendSlash( gamedir, sizeof( gamedir ) ); } else { if ( !Sys_LoadInterface( "filesystem_stdio", FILESYSTEM_INTERFACE_VERSION, &g_pFullFileSystemModule, (void**)&g_pFullFileSystem ) ) { return false; } if ( g_pFullFileSystem->Init() != INIT_OK ) return false; g_pFullFileSystem->RemoveAllSearchPaths(); g_pFullFileSystem->AddSearchPath( "../platform", "PLATFORM" ); g_pFullFileSystem->AddSearchPath( ".", "GAME" ); g_pFileSystem = g_pFullFileSystem; } return true; }
bool FileSystem_Init_Normal( const char *pFilename, FSInitType_t initType, bool bOnlyUseDirectoryName ) { if ( initType == FS_INIT_FULL ) { // First, get the name of the module char fileSystemDLLName[MAX_PATH]; bool bSteam; if ( FileSystem_GetFileSystemDLLName( fileSystemDLLName, MAX_PATH, bSteam ) != FS_OK ) return false; // Next, load the module, call Connect/Init. CFSLoadModuleInfo loadModuleInfo; loadModuleInfo.m_pFileSystemDLLName = fileSystemDLLName; loadModuleInfo.m_pDirectoryName = pFilename; loadModuleInfo.m_bOnlyUseDirectoryName = bOnlyUseDirectoryName; loadModuleInfo.m_ConnectFactory = Sys_GetFactoryThis(); loadModuleInfo.m_bSteam = bSteam; loadModuleInfo.m_bToolsMode = true; if ( FileSystem_LoadFileSystemModule( loadModuleInfo ) != FS_OK ) return false; // Next, mount the content CFSMountContentInfo mountContentInfo; mountContentInfo.m_pDirectoryName= loadModuleInfo.m_GameInfoPath; mountContentInfo.m_pFileSystem = loadModuleInfo.m_pFileSystem; mountContentInfo.m_bToolsMode = true; if ( FileSystem_MountContent( mountContentInfo ) != FS_OK ) return false; // Finally, load the search paths. CFSSearchPathsInit searchPathsInit; searchPathsInit.m_pDirectoryName = loadModuleInfo.m_GameInfoPath; searchPathsInit.m_pFileSystem = loadModuleInfo.m_pFileSystem; if ( FileSystem_LoadSearchPaths( searchPathsInit ) != FS_OK ) return false; // Store the data we got from filesystem_init. g_pFileSystem = g_pFullFileSystem = loadModuleInfo.m_pFileSystem; g_pFullFileSystemModule = loadModuleInfo.m_pModule; FileSystem_AddSearchPath_Platform( g_pFullFileSystem, loadModuleInfo.m_GameInfoPath ); FileSystem_SetupStandardDirectories( pFilename, loadModuleInfo.m_GameInfoPath ); } else { if ( !Sys_LoadInterface( "filesystem_stdio", FILESYSTEM_INTERFACE_VERSION, &g_pFullFileSystemModule, (void**)&g_pFullFileSystem ) ) { return false; } if ( g_pFullFileSystem->Init() != INIT_OK ) return false; g_pFullFileSystem->RemoveAllSearchPaths(); g_pFullFileSystem->AddSearchPath( "../platform", "PLATFORM" ); g_pFullFileSystem->AddSearchPath( ".", "GAME" ); g_pFileSystem = g_pFullFileSystem; } return true; }