using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows; using Sandbox; using Sandbox.Engine.Platform; using Sandbox.Game; using SpaceEngineers.Game; using Torch.API; using VRage.FileSystem; using VRageRender; namespace Torch.Client { class TorchClient : TorchBase, ITorchClient { private MyCommonProgramStartup _startup; private IMyRender _renderer; private const uint APP_ID = 244850; private VRageGameServices _services; public override void Init() { if (!File.Exists("steam_appid.txt")) { Directory.SetCurrentDirectory(Path.GetDirectoryName(typeof(VRage.FastResourceLock).Assembly.Location) + "\\.."); } SpaceEngineersGame.SetupBasicGameInfo(); _startup = new MyCommonProgramStartup(RunArgs); if (_startup.PerformReporting()) return; _startup.PerformAutoconnect(); if (!_startup.CheckSingleInstance()) return; var appDataPath = _startup.GetAppDataPath(); MyInitializer.InvokeBeforeRun(APP_ID, MyPerGameSettings.BasicGameInfo.ApplicationName, appDataPath, false); MyInitializer.InitCheckSum(); if (!_startup.Check64Bit()) return; _startup.DetectSharpDxLeaksBeforeRun(); using (var mySteamService = new SteamService(Game.IsDedicated, APP_ID)) { _renderer = null; SpaceEngineersGame.SetupPerGameSettings(); OverrideMenus(); InitializeRender(); _services = new VRageGameServices(mySteamService); if (!Game.IsDedicated) MyFileSystem.InitUserSpecific(mySteamService.UserId.ToString()); } _startup.DetectSharpDxLeaksAfterRun(); MyInitializer.InvokeAfterRun(); } private void OverrideMenus() { var credits = new MyCreditsDepartment("Torch Developed By") { Persons = new List { new MyCreditsPerson("JIMMACLE"), new MyCreditsPerson("REXXAR"), new MyCreditsPerson("PHOENIXTHESAGE") } }; MyPerGameSettings.Credits.Departments.Insert(0, credits); MyPerGameSettings.GUI.MainMenu = typeof(TorchMainMenuScreen); } public override void Start() { using (var spaceEngineersGame = new SpaceEngineersGame(_services, RunArgs)) { Logger.Write("Starting client..."); spaceEngineersGame.Run(); } } public override void Stop() { MySandboxGame.ExitThreadSafe(); } private void InitializeRender() { try { if (Game.IsDedicated) { _renderer = new MyNullRender(); } else { var graphicsRenderer = MySandboxGame.Config.GraphicsRenderer; if (graphicsRenderer == MySandboxGame.DirectX11RendererKey) { _renderer = new MyDX11Render(); if (!_renderer.IsSupported) { MySandboxGame.Log.WriteLine("DirectX 11 renderer not supported. No renderer to revert back to."); _renderer = null; } } if (_renderer == null) throw new MyRenderException("The current version of the game requires a Dx11 card. \\n For more information please see : http://blog.marekrosa.org/2016/02/space-engineers-news-full-source-code_26.html", MyRenderExceptionEnum.GpuNotSupported); MySandboxGame.Config.GraphicsRenderer = graphicsRenderer; } MyRenderProxy.Initialize(_renderer); MyRenderProxy.GetRenderProfiler().SetAutocommit(false); MyRenderProxy.GetRenderProfiler().InitMemoryHack("MainEntryPoint"); } catch (Exception ex) { MessageBox.Show(ex.Message, "Render Initialization Failed"); Environment.Exit(-1); } } } }