public override void Init() { Directory.SetCurrentDirectory(Program.SpaceEngineersInstallAlias); MyFileSystem.ExePath = Path.Combine(Program.SpaceEngineersInstallAlias, Program.SpaceEngineersBinaries); Log.Info("Initializing Torch Client"); base.Init(); SpaceEngineersGame.SetupBasicGameInfo(); _startup = new MyCommonProgramStartup(RunArgs); if (_startup.PerformReporting()) { throw new InvalidOperationException("Torch client won't launch when started in error reporting mode"); } _startup.PerformAutoconnect(); if (!_startup.CheckSingleInstance()) { throw new InvalidOperationException("Only one instance of Space Engineers can be running at a time."); } var appDataPath = _startup.GetAppDataPath(); MyInitializer.InvokeBeforeRun(APP_ID, MyPerGameSettings.BasicGameInfo.ApplicationName, appDataPath); MyInitializer.InitCheckSum(); _startup.InitSplashScreen(); if (!_startup.Check64Bit()) { throw new InvalidOperationException("Torch requires a 64bit operating system"); } _startup.DetectSharpDxLeaksBeforeRun(); var steamService = new SteamService(Game.IsDedicated, APP_ID); MyServiceManager.Instance.AddService <IMyGameService>(steamService); _renderer = null; SpaceEngineersGame.SetupPerGameSettings(); // I'm sorry, but it's what Keen does in SpaceEngineers.MyProgram #pragma warning disable 612 SpaceEngineersGame.SetupRender(); #pragma warning restore 612 InitializeRender(); if (!_startup.CheckSteamRunning()) { throw new InvalidOperationException("Space Engineers requires steam to be running"); } if (!Game.IsDedicated) { MyFileSystem.InitUserSpecific(MyGameService.UserId.ToString()); } }
// This is mostly copied from MyProgram.Main(), with UI stripped out. protected virtual void InitSandbox(string[] args) { m_args = args; // Infinario was removed from SE in update 1.184.6, but is still in ME var infinario = typeof(MyFakes).GetField("ENABLE_INFINARIO"); if (infinario != null) { infinario.SetValue(null, false); } if (m_game != null) { m_game.Exit(); } if (!SetupBasicGameInfo()) { return; } // Init null render so profiler-enabled builds don't crash var render = new MyNullRender(); MyRenderProxy.Initialize(render); #if SE EmptyKeys.UserInterface.Engine engine = (EmptyKeys.UserInterface.Engine) new VRage.UserInterface.MyEngine(); if (System.Diagnostics.Debugger.IsAttached) { m_startup.CheckSteamRunning(); // Just give the warning message box when debugging, ignore for release } if (!Sandbox.Engine.Platform.Game.IsDedicated) { MyFileSystem.InitUserSpecific(m_steamService.UserId.ToString()); } #endif try { #if !SE MyRenderProxy.GetRenderProfiler().SetAutocommit(false); MyRenderProxy.GetRenderProfiler().InitMemoryHack("MainEntryPoint"); #endif // NOTE: an assert may be thrown in debug, about missing Tutorials.sbx. Ignore it. m_game = InitGame(); // Initializing the workshop means the categories are available var initWorkshopMethod = m_game.GetType().GetMethod("InitSteamWorkshop", BindingFlags.NonPublic | BindingFlags.Instance); MyDebug.AssertRelease(initWorkshopMethod != null); if (initWorkshopMethod != null) { var parameters = initWorkshopMethod.GetParameters(); MyDebug.AssertRelease(parameters.Count() == 0); } if (initWorkshopMethod != null) { initWorkshopMethod.Invoke(m_game, null); } else { MySandboxGame.Log.WriteLineAndConsole(string.Format(Constants.ERROR_Reflection, "InitSteamWorkshop")); } } catch (Exception ex) { // This shouldn't fail, but don't stop even if it does ex.Log("WARNING: An exception occured, ignoring: "); } AuthenticateWorkshop(); }
// Main method static void Main(string[] args) { #if XB1 XB1Interface.XB1Interface.Init(); MyAssembly.Init(); #endif SpaceEngineersGame.SetupBasicGameInfo(); m_startup = new MyCommonProgramStartup(args); if (m_startup.PerformReporting()) { return; } m_startup.PerformAutoconnect(); #if !XB1 if (!m_startup.CheckSingleInstance()) { return; } #endif // !XB1 var appDataPath = m_startup.GetAppDataPath(); MyInitializer.InvokeBeforeRun(AppId, MyPerGameSettings.BasicGameInfo.ApplicationName, appDataPath); MyInitializer.InitCheckSum(); m_startup.InitSplashScreen(); if (!m_startup.Check64Bit()) { return; } m_startup.DetectSharpDxLeaksBeforeRun(); using (MySteamService steamService = new MySteamService(MySandboxGame.IsDedicated, AppId)) { m_renderer = null; SpaceEngineersGame.SetupPerGameSettings(); SpaceEngineersGame.SetupRender(); try { InitializeRender(); } catch (MyRenderException ex) { #if !XB1 MessageBox.Show(ex.Message); #else // XB1 System.Diagnostics.Debug.Assert(false, "InitializeRender failed"); #endif // XB1 return; } VRageRender.MyRenderProxy.GetRenderProfiler().StartProfilingBlock("MyProgram.Init"); VRageRender.MyRenderProxy.GetRenderProfiler().StartProfilingBlock("MySteam.Init()"); if (!m_startup.CheckSteamRunning(steamService)) { return; } VRageRender.MyRenderProxy.GetRenderProfiler().EndProfilingBlock(); VRageRender.MyRenderProxy.GetRenderProfiler().StartProfilingBlock("new MySandboxGame()"); VRageGameServices services = new VRageGameServices(steamService); if (!MySandboxGame.IsDedicated) { MyFileSystem.InitUserSpecific(steamService.UserId.ToString()); } using (SpaceEngineersGame game = new SpaceEngineersGame(services, args)) { VRageRender.MyRenderProxy.GetRenderProfiler().EndProfilingBlock(); VRageRender.MyRenderProxy.GetRenderProfiler().EndProfilingBlock(); game.Run(disposeSplashScreen: m_startup.DisposeSplashScreen); } } m_startup.DetectSharpDxLeaksAfterRun(); #if PROFILING MyPerformanceTimer.WriteToLog(); #endif MyInitializer.InvokeAfterRun(); }
// This is mostly copied from MyProgram.Main(), with UI stripped out. private static void InitSandbox(string instancepath) { MyFakes.ENABLE_INFINARIO = false; if (m_spacegame != null) { m_spacegame.Exit(); } SpaceEngineersGame.SetupBasicGameInfo(); m_startup = new MyCommonProgramStartup(new string[] { }); var appDataPath = m_startup.GetAppDataPath(); MyInitializer.InvokeBeforeRun(AppId_SE, MyPerGameSettings.BasicGameInfo.ApplicationName + "ModTool", appDataPath); MyInitializer.InitCheckSum(); if (!m_startup.Check64Bit()) { return; } m_steamService = new MySteamService(MySandboxGame.IsDedicated, AppId_SE); SpaceEngineersGame.SetupPerGameSettings(); if (System.Diagnostics.Debugger.IsAttached) { m_startup.CheckSteamRunning(m_steamService); // Just give the warning message box when debugging, ignore for release } VRageGameServices services = new VRageGameServices(m_steamService); if (!MySandboxGame.IsDedicated) { MyFileSystem.InitUserSpecific(m_steamService.UserId.ToString()); } try { // NOTE: an assert may be thrown in debug, about missing Tutorials.sbx. Ignore it. m_spacegame = new SpaceEngineersGame(services, null); // Initializing the workshop means the categories are available var initWorkshopMethod = typeof(SpaceEngineersGame).GetMethod("InitSteamWorkshop", BindingFlags.NonPublic | BindingFlags.Instance); MyDebug.AssertDebug(initWorkshopMethod != null); if (initWorkshopMethod != null) { var parameters = initWorkshopMethod.GetParameters(); MyDebug.AssertDebug(parameters.Count() == 0); } if (initWorkshopMethod != null) { initWorkshopMethod.Invoke(m_spacegame, null); } else { MySandboxGame.Log.WriteLineAndConsole(string.Format(Constants.ERROR_Reflection, "InitSteamWorkshop")); } } catch (Exception ex) { // This shouldn't fail, but don't stop even if it does MySandboxGame.Log.WriteLineAndConsole("An exception occured, ignoring: " + ex.Message); } }