- Leaving a game now returns you to the respective menu.
- I think that I covered all of the possibilities (mission, skirmish, multiplayer, map editor, replay).
This commit is contained in:
BGluth
2018-07-19 19:57:47 -06:00
committed by Paul Chote
parent d6682faeee
commit a43bdff603
2 changed files with 88 additions and 40 deletions

View File

@@ -59,6 +59,8 @@ namespace OpenRA
static Task discoverNat;
static bool takeScreenshot = false;
public static event Action OnShellmapLoaded;
public static OrderManager JoinServer(string host, int port, string password, bool recordReplay = true)
{
var connection = new NetworkConnection(host, port);
@@ -471,7 +473,10 @@ namespace OpenRA
var shellmap = ChooseShellmap();
using (new PerfTimer("StartGame"))
{
StartGame(shellmap, WorldType.Shellmap);
OnShellmapLoaded();
}
}
static string ChooseShellmap()

View File

@@ -28,6 +28,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
{
protected enum MenuType { Main, Singleplayer, Extras, MapEditor, SystemInfoPrompt, None }
protected enum MenuPanel { None, Missions, Skirmish, Multiplayer, MapEditor, Replays }
protected MenuType menuType = MenuType.Main;
readonly Widget rootMenu;
readonly ScrollPanelWidget newsPanel;
@@ -37,6 +39,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
// Update news once per game launch
static bool fetchedNews;
protected static MenuPanel lastGameState = MenuPanel.None;
bool newsOpen;
// Increment the version number when adding new stats
@@ -79,17 +83,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
mainMenu.Get<ButtonWidget>("SINGLEPLAYER_BUTTON").OnClick = () => SwitchMenu(MenuType.Singleplayer);
mainMenu.Get<ButtonWidget>("MULTIPLAYER_BUTTON").OnClick = () =>
{
SwitchMenu(MenuType.None);
Ui.OpenWindow("MULTIPLAYER_PANEL", new WidgetArgs
{
{ "onStart", RemoveShellmapUI },
{ "onExit", () => SwitchMenu(MenuType.Main) },
{ "directConnectHost", null },
{ "directConnectPort", 0 },
});
};
mainMenu.Get<ButtonWidget>("MULTIPLAYER_BUTTON").OnClick = OpenMultiplayerPanel;
mainMenu.Get<ButtonWidget>("CONTENT_BUTTON").OnClick = () =>
{
@@ -120,15 +114,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
singleplayerMenu.IsVisible = () => menuType == MenuType.Singleplayer;
var missionsButton = singleplayerMenu.Get<ButtonWidget>("MISSIONS_BUTTON");
missionsButton.OnClick = () =>
{
SwitchMenu(MenuType.None);
Game.OpenWindow("MISSIONBROWSER_PANEL", new WidgetArgs
{
{ "onExit", () => SwitchMenu(MenuType.Singleplayer) },
{ "onStart", RemoveShellmapUI }
});
};
missionsButton.OnClick = OpenMissionBrowserPanel;
var hasCampaign = modData.Manifest.Missions.Any();
var hasMissions = modData.MapCache
@@ -144,15 +130,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
var extrasMenu = widget.Get("EXTRAS_MENU");
extrasMenu.IsVisible = () => menuType == MenuType.Extras;
extrasMenu.Get<ButtonWidget>("REPLAYS_BUTTON").OnClick = () =>
{
SwitchMenu(MenuType.None);
Ui.OpenWindow("REPLAYBROWSER_PANEL", new WidgetArgs
{
{ "onExit", () => SwitchMenu(MenuType.Extras) },
{ "onStart", RemoveShellmapUI }
});
};
extrasMenu.Get<ButtonWidget>("REPLAYS_BUTTON").OnClick = OpenReplayBrowserPanel;
extrasMenu.Get<ButtonWidget>("MUSIC_BUTTON").OnClick = () =>
{
@@ -283,6 +261,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
}
else
LoadAndDisplayNews(webServices.GameNews, newsBG);
Game.OnShellmapLoaded += OpenMenuBasedOnLastGame;
}
void LoadAndDisplayNews(string newsURL, Widget newsBG)
@@ -347,6 +327,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
"",
() => { Game.LoadEditor(uid); },
() => { Game.CloseServer(); SwitchMenu(MenuType.MapEditor); });
lastGameState = MenuPanel.MapEditor;
}
void SetNewsStatus(string message)
@@ -447,17 +429,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
rootMenu.Parent.RemoveChild(rootMenu);
}
void OpenSkirmishLobbyPanel()
{
SwitchMenu(MenuType.None);
Game.OpenWindow("SERVER_LOBBY", new WidgetArgs
{
{ "onExit", () => { Game.Disconnect(); SwitchMenu(MenuType.Singleplayer); } },
{ "onStart", RemoveShellmapUI },
{ "skirmishMode", true }
});
}
void StartSkirmishGame()
{
var map = Game.ModData.MapCache.ChooseInitialMap(Game.Settings.Server.Map, Game.CosmeticRandom);
@@ -471,6 +442,49 @@ namespace OpenRA.Mods.Common.Widgets.Logic
() => { Game.CloseServer(); SwitchMenu(MenuType.Main); });
}
void OpenMissionBrowserPanel()
{
SwitchMenu(MenuType.None);
Game.OpenWindow("MISSIONBROWSER_PANEL", new WidgetArgs
{
{ "onExit", () => SwitchMenu(MenuType.Singleplayer) },
{ "onStart", () => { RemoveShellmapUI(); lastGameState = MenuPanel.Missions; } }
});
}
void OpenSkirmishLobbyPanel()
{
SwitchMenu(MenuType.None);
Game.OpenWindow("SERVER_LOBBY", new WidgetArgs
{
{ "onExit", () => { Game.Disconnect(); SwitchMenu(MenuType.Singleplayer); } },
{ "onStart", () => { RemoveShellmapUI(); lastGameState = MenuPanel.Skirmish; } },
{ "skirmishMode", true }
});
}
void OpenMultiplayerPanel()
{
SwitchMenu(MenuType.None);
Ui.OpenWindow("MULTIPLAYER_PANEL", new WidgetArgs
{
{ "onStart", () => { RemoveShellmapUI(); lastGameState = MenuPanel.Multiplayer; } },
{ "onExit", () => SwitchMenu(MenuType.Main) },
{ "directConnectHost", null },
{ "directConnectPort", 0 },
});
}
void OpenReplayBrowserPanel()
{
SwitchMenu(MenuType.None);
Ui.OpenWindow("REPLAYBROWSER_PANEL", new WidgetArgs
{
{ "onExit", () => SwitchMenu(MenuType.Extras) },
{ "onStart", () => { RemoveShellmapUI(); lastGameState = MenuPanel.Replays; } }
});
}
protected override void Dispose(bool disposing)
{
if (disposing)
@@ -479,7 +493,36 @@ namespace OpenRA.Mods.Common.Widgets.Logic
Game.BeforeGameStart -= RemoveShellmapUI;
}
Game.OnShellmapLoaded -= OpenMenuBasedOnLastGame;
base.Dispose(disposing);
}
void OpenMenuBasedOnLastGame()
{
switch (lastGameState)
{
case MenuPanel.Missions:
OpenMissionBrowserPanel();
break;
case MenuPanel.Replays:
OpenReplayBrowserPanel();
break;
case MenuPanel.Skirmish:
StartSkirmishGame();
break;
case MenuPanel.Multiplayer:
OpenMultiplayerPanel();
break;
case MenuPanel.MapEditor:
SwitchMenu(MenuType.MapEditor);
break;
}
lastGameState = MenuPanel.None;
}
}
}