public static void InitializeWithMods(string[] mods) { // Clear static state if we have switched mods LobbyInfoChanged = () => {}; AddChatLine = (a, b, c) => {}; ConnectionStateChanged = om => {}; BeforeGameStart = () => {}; Ui.ResetAll(); worldRenderer = null; if (server != null) { server.Shutdown(); } if (orderManager != null) { orderManager.Dispose(); } // Discard any invalid mods var mm = mods.Where(m => Mod.AllMods.ContainsKey(m)).ToArray(); Console.WriteLine("Loading mods: {0}", mm.JoinWith(",")); Settings.Game.Mods = mm; Settings.Save(); Sound.StopMusic(); Sound.StopVideo(); Sound.Initialize(); modData = new ModData(mm); Renderer.InitializeFonts(modData.Manifest); modData.LoadInitialAssets(); PerfHistory.items["render"].hasNormalTick = false; PerfHistory.items["batches"].hasNormalTick = false; PerfHistory.items["render_widgets"].hasNormalTick = false; PerfHistory.items["render_flip"].hasNormalTick = false; JoinLocal(); viewport = new Viewport(new int2(Renderer.Resolution), Rectangle.Empty, Renderer); modData.LoadScreen.StartGame(); }
public static void InitializeWithMods(string[] mods) { // Clear static state if we have switched mods LobbyInfoChanged = () => {}; AddChatLine = (a, b, c) => {}; ConnectionStateChanged = om => {}; BeforeGameStart = () => {}; Ui.ResetAll(); worldRenderer = null; if (server != null) { server.Shutdown(); } if (orderManager != null) { orderManager.Dispose(); } // Discard any invalid mods, set RA as default var mm = mods.Where(m => Mod.AllMods.ContainsKey(m)).ToArray(); if (mm.Length == 0) { mm = new[] { "ra" } } ; Console.WriteLine("Loading mods: {0}", mm.JoinWith(",")); Settings.Game.Mods = mm; Sound.StopMusic(); Sound.StopVideo(); Sound.Initialize(); modData = new ModData(mm); Renderer.InitializeFonts(modData.Manifest); modData.LoadInitialAssets(true); PerfHistory.items["render"].hasNormalTick = false; PerfHistory.items["batches"].hasNormalTick = false; PerfHistory.items["render_widgets"].hasNormalTick = false; PerfHistory.items["render_flip"].hasNormalTick = false; JoinLocal(); viewport = new Viewport(new int2(Renderer.Resolution), Rectangle.Empty, Renderer); if (Game.Settings.Server.Dedicated) { while (true) { Game.Settings.Server.Map = WidgetUtils.ChooseInitialMap(Game.Settings.Server.Map); Game.Settings.Save(); Game.CreateServer(new ServerSettings(Game.Settings.Server)); while (true) { System.Threading.Thread.Sleep(100); if ((server.State == Server.ServerState.GameStarted) && (server.conns.Count <= 1)) { Console.WriteLine("No one is playing, shutting down..."); server.Shutdown(); break; } } if (Game.Settings.Server.DedicatedLoop) { Console.WriteLine("Starting a new server instance..."); continue; } else { break; } } System.Environment.Exit(0); } else { modData.LoadScreen.StartGame(); Settings.Save(); } }