public bool Startup(Func <ILogHandler>?logHandlerFactory = null) { ReadInitialLaunchState(); SetupLogging(_logManager, logHandlerFactory ?? (() => new ConsoleLogHandler())); _taskManager.Initialize(); // Figure out user data directory. var userDataDir = GetUserDataDir(); if (LoadConfigAndUserData) { var configFile = Path.Combine(userDataDir, "client_config.toml"); if (File.Exists(configFile)) { // Load config from user data if available. _configurationManager.LoadFromFile(configFile); } else { // Else we just use code-defined defaults and let it save to file when the user changes things. _configurationManager.SetSaveFile(configFile); } } _configurationManager.OverrideConVars(EnvironmentVariables.GetEnvironmentCVars()); if (_commandLineArgs != null) { _configurationManager.OverrideConVars(_commandLineArgs.CVars); } _signalHandler.MaybeStart(); _resourceCache.Initialize(LoadConfigAndUserData ? userDataDir : null); #if FULL_RELEASE _resourceCache.MountContentDirectory(@"Resources/"); #else var contentRootDir = ProgramShared.FindContentRootDir(); _resourceCache.MountContentDirectory($@"{contentRootDir}RobustToolbox/Resources/"); _resourceCache.MountContentDirectory($@"{contentRootDir}bin/Content.Client/", new ResourcePath("/Assemblies/")); _resourceCache.MountContentDirectory($@"{contentRootDir}Resources/"); #endif // Bring display up as soon as resources are mounted. if (!_clyde.Initialize()) { return(false); } _clyde.SetWindowTitle("Space Station 14"); _fontManager.Initialize(); // Disable load context usage on content start. // This prevents Content.Client being loaded twice and things like csi blowing up because of it. _modLoader.SetUseLoadContext(!_disableAssemblyLoadContext); //identical code for server in baseserver if (!_modLoader.TryLoadAssembly <GameShared>(_resourceManager, $"Content.Shared")) { Logger.FatalS("eng", "Could not load any Shared DLL."); throw new NotSupportedException("Cannot load client without content assembly"); } if (!_modLoader.TryLoadAssembly <GameClient>(_resourceManager, $"Content.Client")) { Logger.FatalS("eng", "Could not load any Client DLL."); throw new NotSupportedException("Cannot load client without content assembly"); } // Call Init in game assemblies. _modLoader.BroadcastRunLevel(ModRunLevel.PreInit); _modLoader.BroadcastRunLevel(ModRunLevel.Init); _userInterfaceManager.Initialize(); _networkManager.Initialize(false); _serializer.Initialize(); _inputManager.Initialize(); _console.Initialize(); _prototypeManager.LoadDirectory(new ResourcePath(@"/Prototypes/")); _prototypeManager.Resync(); _mapManager.Initialize(); _entityManager.Initialize(); _gameStateManager.Initialize(); _placementManager.Initialize(); _viewVariablesManager.Initialize(); _conGroupController.Initialize(); _scriptClient.Initialize(); _client.Initialize(); _discord.Initialize(); _modLoader.BroadcastRunLevel(ModRunLevel.PostInit); if (_commandLineArgs?.Username != null) { _client.PlayerNameOverride = _commandLineArgs.Username; } _clyde.Ready(); if ((_commandLineArgs?.Connect == true || _commandLineArgs?.Launcher == true) && LaunchState.ConnectEndpoint != null) { _client.ConnectToServer(LaunchState.ConnectEndpoint); } return(true); }
public bool Startup(Func <ILogHandler>?logHandlerFactory = null) { ReadInitialLaunchState(); SetupLogging(_logManager, logHandlerFactory ?? (() => new ConsoleLogHandler())); _taskManager.Initialize(); // Figure out user data directory. var userDataDir = GetUserDataDir(); _configurationManager.Initialize(false); // MUST load cvars before loading from config file so the cfg manager is aware of secure cvars. // So SECURE CVars are blacklisted from config. _configurationManager.LoadCVarsFromAssembly(typeof(GameController).Assembly); // Client _configurationManager.LoadCVarsFromAssembly(typeof(IConfigurationManager).Assembly); // Shared if (LoadConfigAndUserData) { var configFile = Path.Combine(userDataDir, "client_config.toml"); if (File.Exists(configFile)) { // Load config from user data if available. _configurationManager.LoadFromFile(configFile); } else { // Else we just use code-defined defaults and let it save to file when the user changes things. _configurationManager.SetSaveFile(configFile); } } _configurationManager.OverrideConVars(EnvironmentVariables.GetEnvironmentCVars()); if (_commandLineArgs != null) { _configurationManager.OverrideConVars(_commandLineArgs.CVars); } _resourceCache.Initialize(LoadConfigAndUserData ? userDataDir : null); ProgramShared.DoMounts(_resourceCache, _commandLineArgs?.MountOptions, "Content.Client", _loaderArgs != null); if (_loaderArgs != null) { _stringSerializer.EnableCaching = false; _resourceCache.MountLoaderApi(_loaderArgs.FileApi, "Resources/"); _modLoader.VerifierExtraLoadHandler = VerifierExtraLoadHandler; } // Bring display up as soon as resources are mounted. if (!_clyde.Initialize()) { return(false); } _clyde.SetWindowTitle("Space Station 14"); _fontManager.Initialize(); // Disable load context usage on content start. // This prevents Content.Client being loaded twice and things like csi blowing up because of it. _modLoader.SetUseLoadContext(!_disableAssemblyLoadContext); _modLoader.SetEnableSandboxing(true); if (!_modLoader.TryLoadModulesFrom(new ResourcePath("/Assemblies/"), "Content.")) { Logger.Fatal("Errors while loading content assemblies."); return(false); } foreach (var loadedModule in _modLoader.LoadedModules) { _configurationManager.LoadCVarsFromAssembly(loadedModule); } // Call Init in game assemblies. _modLoader.BroadcastRunLevel(ModRunLevel.PreInit); _modLoader.BroadcastRunLevel(ModRunLevel.Init); _userInterfaceManager.Initialize(); _networkManager.Initialize(false); IoCManager.Resolve <INetConfigurationManager>().SetupNetworking(); _serializer.Initialize(); _inputManager.Initialize(); _consoleHost.Initialize(); _prototypeManager.Initialize(); _prototypeManager.LoadDirectory(new ResourcePath(@"/Prototypes/")); _prototypeManager.Resync(); _mapManager.Initialize(); _entityManager.Initialize(); _gameStateManager.Initialize(); _placementManager.Initialize(); _viewVariablesManager.Initialize(); _scriptClient.Initialize(); _client.Initialize(); _discord.Initialize(); _modLoader.BroadcastRunLevel(ModRunLevel.PostInit); if (_commandLineArgs?.Username != null) { _client.PlayerNameOverride = _commandLineArgs.Username; } _authManager.LoadFromEnv(); _clyde.Ready(); if ((_commandLineArgs?.Connect == true || _commandLineArgs?.Launcher == true) && LaunchState.ConnectEndpoint != null) { _client.ConnectToServer(LaunchState.ConnectEndpoint); } return(true); }