From 485e69558518363a3b0d3a61301ad45c2f302ea3 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 28 May 2016 18:13:09 +0100 Subject: [PATCH 1/3] Use BeforeGameStart to remove mission browser UI on game start. --- OpenRA.Game/Game.cs | 6 ++--- .../Widgets/Logic/MissionBrowserLogic.cs | 23 +++++++++++++++++-- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/OpenRA.Game/Game.cs b/OpenRA.Game/Game.cs index e6b3c196a6..0e669f5c74 100644 --- a/OpenRA.Game/Game.cs +++ b/OpenRA.Game/Game.cs @@ -197,7 +197,7 @@ namespace OpenRA CreateAndStartLocalServer(lobbyInfo.GlobalSettings.Map, orders); } - public static void CreateAndStartLocalServer(string mapUID, IEnumerable setupOrders, Action onStart = null) + public static void CreateAndStartLocalServer(string mapUID, IEnumerable setupOrders) { OrderManager om = null; @@ -207,10 +207,8 @@ namespace OpenRA LobbyInfoChanged -= lobbyReady; foreach (var o in setupOrders) om.IssueOrder(o); - - if (onStart != null) - onStart(); }; + LobbyInfoChanged += lobbyReady; om = JoinServer(IPAddress.Loopback.ToString(), CreateLocalServer(mapUID), ""); diff --git a/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs index f084c991a8..4acc95caa6 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/MissionBrowserLogic.cs @@ -55,6 +55,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic { this.modData = modData; this.onStart = onStart; + Game.BeforeGameStart += OnGameStart; missionList = widget.Get("MISSION_LIST"); @@ -151,6 +152,24 @@ namespace OpenRA.Mods.Common.Widgets.Logic }; } + void OnGameStart() + { + Ui.CloseWindow(); + onStart(); + } + + bool disposed; + protected override void Dispose(bool disposing) + { + if (disposing && !disposed) + { + disposed = true; + Game.BeforeGameStart -= OnGameStart; + } + + base.Dispose(disposing); + } + void CreateMissionGroup(string title, IEnumerable previews) { var header = ScrollItemWidget.Setup(headerTemplate, () => true, () => { }); @@ -344,11 +363,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic PlayVideo(fsPlayer, missionData.StartVideo, PlayingVideo.GameStart, () => { StopVideo(fsPlayer); - Game.CreateAndStartLocalServer(selectedMap.Uid, orders, onStart); + Game.CreateAndStartLocalServer(selectedMap.Uid, orders); }); } else - Game.CreateAndStartLocalServer(selectedMap.Uid, orders, onStart); + Game.CreateAndStartLocalServer(selectedMap.Uid, orders); } class DropDownOption From fba509b3632755166c110c4509d4c05a1e036e5f Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 28 May 2016 18:16:18 +0100 Subject: [PATCH 2/3] Use BeforeGameStart to remove replay browser UI on game start. --- .../Widgets/Logic/ReplayBrowserLogic.cs | 28 ++++++++++++++----- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/OpenRA.Mods.Common/Widgets/Logic/ReplayBrowserLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/ReplayBrowserLogic.cs index 003af771f0..82f717b7b1 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/ReplayBrowserLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/ReplayBrowserLogic.cs @@ -44,6 +44,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic panel = widget; this.onStart = onStart; + Game.BeforeGameStart += OnGameStart; playerList = panel.Get("PLAYER_LIST"); playerHeader = playerList.Get("HEADER"); @@ -664,16 +665,11 @@ namespace OpenRA.Mods.Common.Widgets.Logic void WatchReplay() { - Action startReplay = () => + if (selectedReplay != null && ReplayUtils.PromptConfirmReplayCompatibility(selectedReplay)) { cancelLoadingReplays = true; Game.JoinReplay(selectedReplay.FilePath); - Ui.CloseWindow(); - onStart(); - }; - - if (selectedReplay != null && ReplayUtils.PromptConfirmReplayCompatibility(selectedReplay)) - startReplay(); + } } void AddReplay(ReplayMetadata replay, ScrollItemWidget template) @@ -697,6 +693,24 @@ namespace OpenRA.Mods.Common.Widgets.Logic replayList.AddChild(item); } + void OnGameStart() + { + Ui.CloseWindow(); + onStart(); + } + + bool disposed; + protected override void Dispose(bool disposing) + { + if (disposing && !disposed) + { + disposed = true; + Game.BeforeGameStart -= OnGameStart; + } + + base.Dispose(disposing); + } + class ReplayState { public bool Visible; From ec2d883e9eca56bef97630c93feb1e902ea24819 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 28 May 2016 18:21:44 +0100 Subject: [PATCH 3/3] Move lobby event unbinding to Dispose. --- .../Widgets/Logic/Lobby/LobbyLogic.cs | 33 +++++++++++-------- 1 file changed, 19 insertions(+), 14 deletions(-) diff --git a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs index 14b6ead95e..3ed3a458c4 100644 --- a/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs +++ b/OpenRA.Mods.Common/Widgets/Logic/Lobby/LobbyLogic.cs @@ -77,7 +77,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic if (om.Connection.ConnectionState == ConnectionState.NotConnected) { // Show connection failed dialog - CloseWindow(); + Ui.CloseWindow(); Action onConnect = () => { @@ -100,17 +100,6 @@ namespace OpenRA.Mods.Common.Widgets.Logic } } - void CloseWindow() - { - orderManager.AddChatLine -= AddChatLine; - Game.LobbyInfoChanged -= UpdateCurrentMap; - Game.LobbyInfoChanged -= UpdatePlayerList; - Game.BeforeGameStart -= OnGameStart; - Game.ConnectionStateChanged -= ConnectionStateChanged; - - Ui.CloseWindow(); - } - [ObjectCreator.UseCtor] internal LobbyLogic(Widget widget, ModData modData, WorldRenderer worldRenderer, OrderManager orderManager, Action onExit, Action onStart, bool skirmishMode) @@ -618,7 +607,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic } var disconnectButton = lobby.Get("DISCONNECT_BUTTON"); - disconnectButton.OnClick = () => { CloseWindow(); onExit(); }; + disconnectButton.OnClick = () => { Ui.CloseWindow(); onExit(); }; if (skirmishMode) disconnectButton.Text = "Back"; @@ -716,6 +705,22 @@ namespace OpenRA.Mods.Common.Widgets.Logic addBotOnMapLoad = true; } + bool disposed; + protected override void Dispose(bool disposing) + { + if (disposing && !disposed) + { + disposed = true; + orderManager.AddChatLine -= AddChatLine; + Game.LobbyInfoChanged -= UpdateCurrentMap; + Game.LobbyInfoChanged -= UpdatePlayerList; + Game.BeforeGameStart -= OnGameStart; + Game.ConnectionStateChanged -= ConnectionStateChanged; + } + + base.Dispose(disposing); + } + public override void Tick() { var newMessages = Game.GlobalChat.History.Count(m => m.Type == ChatMessageType.Message); @@ -985,7 +990,7 @@ namespace OpenRA.Mods.Common.Widgets.Logic void OnGameStart() { - CloseWindow(); + Ui.CloseWindow(); onStart(); }