Implemented #15325
- 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:
@@ -59,6 +59,8 @@ namespace OpenRA
|
|||||||
static Task discoverNat;
|
static Task discoverNat;
|
||||||
static bool takeScreenshot = false;
|
static bool takeScreenshot = false;
|
||||||
|
|
||||||
|
public static event Action OnShellmapLoaded;
|
||||||
|
|
||||||
public static OrderManager JoinServer(string host, int port, string password, bool recordReplay = true)
|
public static OrderManager JoinServer(string host, int port, string password, bool recordReplay = true)
|
||||||
{
|
{
|
||||||
var connection = new NetworkConnection(host, port);
|
var connection = new NetworkConnection(host, port);
|
||||||
@@ -471,7 +473,10 @@ namespace OpenRA
|
|||||||
var shellmap = ChooseShellmap();
|
var shellmap = ChooseShellmap();
|
||||||
|
|
||||||
using (new PerfTimer("StartGame"))
|
using (new PerfTimer("StartGame"))
|
||||||
|
{
|
||||||
StartGame(shellmap, WorldType.Shellmap);
|
StartGame(shellmap, WorldType.Shellmap);
|
||||||
|
OnShellmapLoaded();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static string ChooseShellmap()
|
static string ChooseShellmap()
|
||||||
|
|||||||
@@ -28,6 +28,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
{
|
{
|
||||||
protected enum MenuType { Main, Singleplayer, Extras, MapEditor, SystemInfoPrompt, None }
|
protected enum MenuType { Main, Singleplayer, Extras, MapEditor, SystemInfoPrompt, None }
|
||||||
|
|
||||||
|
protected enum MenuPanel { None, Missions, Skirmish, Multiplayer, MapEditor, Replays }
|
||||||
|
|
||||||
protected MenuType menuType = MenuType.Main;
|
protected MenuType menuType = MenuType.Main;
|
||||||
readonly Widget rootMenu;
|
readonly Widget rootMenu;
|
||||||
readonly ScrollPanelWidget newsPanel;
|
readonly ScrollPanelWidget newsPanel;
|
||||||
@@ -37,6 +39,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
// Update news once per game launch
|
// Update news once per game launch
|
||||||
static bool fetchedNews;
|
static bool fetchedNews;
|
||||||
|
|
||||||
|
protected static MenuPanel lastGameState = MenuPanel.None;
|
||||||
|
|
||||||
bool newsOpen;
|
bool newsOpen;
|
||||||
|
|
||||||
// Increment the version number when adding new stats
|
// 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>("SINGLEPLAYER_BUTTON").OnClick = () => SwitchMenu(MenuType.Singleplayer);
|
||||||
|
|
||||||
mainMenu.Get<ButtonWidget>("MULTIPLAYER_BUTTON").OnClick = () =>
|
mainMenu.Get<ButtonWidget>("MULTIPLAYER_BUTTON").OnClick = OpenMultiplayerPanel;
|
||||||
{
|
|
||||||
SwitchMenu(MenuType.None);
|
|
||||||
Ui.OpenWindow("MULTIPLAYER_PANEL", new WidgetArgs
|
|
||||||
{
|
|
||||||
{ "onStart", RemoveShellmapUI },
|
|
||||||
{ "onExit", () => SwitchMenu(MenuType.Main) },
|
|
||||||
{ "directConnectHost", null },
|
|
||||||
{ "directConnectPort", 0 },
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
mainMenu.Get<ButtonWidget>("CONTENT_BUTTON").OnClick = () =>
|
mainMenu.Get<ButtonWidget>("CONTENT_BUTTON").OnClick = () =>
|
||||||
{
|
{
|
||||||
@@ -120,15 +114,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
singleplayerMenu.IsVisible = () => menuType == MenuType.Singleplayer;
|
singleplayerMenu.IsVisible = () => menuType == MenuType.Singleplayer;
|
||||||
|
|
||||||
var missionsButton = singleplayerMenu.Get<ButtonWidget>("MISSIONS_BUTTON");
|
var missionsButton = singleplayerMenu.Get<ButtonWidget>("MISSIONS_BUTTON");
|
||||||
missionsButton.OnClick = () =>
|
missionsButton.OnClick = OpenMissionBrowserPanel;
|
||||||
{
|
|
||||||
SwitchMenu(MenuType.None);
|
|
||||||
Game.OpenWindow("MISSIONBROWSER_PANEL", new WidgetArgs
|
|
||||||
{
|
|
||||||
{ "onExit", () => SwitchMenu(MenuType.Singleplayer) },
|
|
||||||
{ "onStart", RemoveShellmapUI }
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
var hasCampaign = modData.Manifest.Missions.Any();
|
var hasCampaign = modData.Manifest.Missions.Any();
|
||||||
var hasMissions = modData.MapCache
|
var hasMissions = modData.MapCache
|
||||||
@@ -144,15 +130,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
var extrasMenu = widget.Get("EXTRAS_MENU");
|
var extrasMenu = widget.Get("EXTRAS_MENU");
|
||||||
extrasMenu.IsVisible = () => menuType == MenuType.Extras;
|
extrasMenu.IsVisible = () => menuType == MenuType.Extras;
|
||||||
|
|
||||||
extrasMenu.Get<ButtonWidget>("REPLAYS_BUTTON").OnClick = () =>
|
extrasMenu.Get<ButtonWidget>("REPLAYS_BUTTON").OnClick = OpenReplayBrowserPanel;
|
||||||
{
|
|
||||||
SwitchMenu(MenuType.None);
|
|
||||||
Ui.OpenWindow("REPLAYBROWSER_PANEL", new WidgetArgs
|
|
||||||
{
|
|
||||||
{ "onExit", () => SwitchMenu(MenuType.Extras) },
|
|
||||||
{ "onStart", RemoveShellmapUI }
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
extrasMenu.Get<ButtonWidget>("MUSIC_BUTTON").OnClick = () =>
|
extrasMenu.Get<ButtonWidget>("MUSIC_BUTTON").OnClick = () =>
|
||||||
{
|
{
|
||||||
@@ -283,6 +261,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
}
|
}
|
||||||
else
|
else
|
||||||
LoadAndDisplayNews(webServices.GameNews, newsBG);
|
LoadAndDisplayNews(webServices.GameNews, newsBG);
|
||||||
|
|
||||||
|
Game.OnShellmapLoaded += OpenMenuBasedOnLastGame;
|
||||||
}
|
}
|
||||||
|
|
||||||
void LoadAndDisplayNews(string newsURL, Widget newsBG)
|
void LoadAndDisplayNews(string newsURL, Widget newsBG)
|
||||||
@@ -347,6 +327,8 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
"",
|
"",
|
||||||
() => { Game.LoadEditor(uid); },
|
() => { Game.LoadEditor(uid); },
|
||||||
() => { Game.CloseServer(); SwitchMenu(MenuType.MapEditor); });
|
() => { Game.CloseServer(); SwitchMenu(MenuType.MapEditor); });
|
||||||
|
|
||||||
|
lastGameState = MenuPanel.MapEditor;
|
||||||
}
|
}
|
||||||
|
|
||||||
void SetNewsStatus(string message)
|
void SetNewsStatus(string message)
|
||||||
@@ -447,17 +429,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
rootMenu.Parent.RemoveChild(rootMenu);
|
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()
|
void StartSkirmishGame()
|
||||||
{
|
{
|
||||||
var map = Game.ModData.MapCache.ChooseInitialMap(Game.Settings.Server.Map, Game.CosmeticRandom);
|
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); });
|
() => { 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)
|
protected override void Dispose(bool disposing)
|
||||||
{
|
{
|
||||||
if (disposing)
|
if (disposing)
|
||||||
@@ -479,7 +493,36 @@ namespace OpenRA.Mods.Common.Widgets.Logic
|
|||||||
Game.BeforeGameStart -= RemoveShellmapUI;
|
Game.BeforeGameStart -= RemoveShellmapUI;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Game.OnShellmapLoaded -= OpenMenuBasedOnLastGame;
|
||||||
base.Dispose(disposing);
|
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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user