From 6cd709ea0b337f8f80d5b168560d59303b258fea Mon Sep 17 00:00:00 2001 From: milimoe Date: Mon, 18 Dec 2023 20:08:04 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=8C=E5=96=84EndGame=E7=9A=84=E9=A2=84?= =?UTF-8?q?=E7=95=99=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- FunGame.Desktop/Library/Base/BaseMain.cs | 27 ++++++++++++++++++- FunGame.Desktop/UI/Main/Main.cs | 33 ++++++++++++++++++------ 2 files changed, 51 insertions(+), 9 deletions(-) diff --git a/FunGame.Desktop/Library/Base/BaseMain.cs b/FunGame.Desktop/Library/Base/BaseMain.cs index 98246cc..e84eaa9 100644 --- a/FunGame.Desktop/Library/Base/BaseMain.cs +++ b/FunGame.Desktop/Library/Base/BaseMain.cs @@ -5,7 +5,7 @@ using Milimoe.FunGame.Desktop.Library.Component; namespace Milimoe.FunGame.Desktop.Library.Base { public class BaseMain : GeneralForm, IConnectEventHandler, IDisconnectEventHandler, ILoginEventHandler, ILogoutEventHandler, IIntoRoomEventHandler, ISendTalkEventHandler, - ICreateRoomEventHandler, IQuitRoomEventHandler, IStartMatchEventHandler, IStartGameEventHandler, IOpenInventoryEventHandler, IOpenStoreEventHandler + ICreateRoomEventHandler, IQuitRoomEventHandler, IStartMatchEventHandler, IStartGameEventHandler, IEndGameEventHandler, IOpenInventoryEventHandler, IOpenStoreEventHandler { public event IConnectEventHandler.BeforeEventHandler? BeforeConnect; public event IConnectEventHandler.AfterEventHandler? AfterConnect; @@ -306,5 +306,30 @@ namespace Milimoe.FunGame.Desktop.Library.Base { FailedOpenStore?.Invoke(sender, e); } + + public event IEventHandler.BeforeEventHandler? BeforeEndGame; + public event IEventHandler.AfterEventHandler? AfterEndGame; + public event IEventHandler.SucceedEventHandler? SucceedEndGame; + public event IEventHandler.FailedEventHandler? FailedEndGame; + + public void OnBeforeEndGameEvent(object sender, GeneralEventArgs e) + { + BeforeEndGame?.Invoke(sender, e); + } + + public void OnAfterEndGameEvent(object sender, GeneralEventArgs e) + { + AfterEndGame?.Invoke(sender, e); + } + + public void OnSucceedEndGameEvent(object sender, GeneralEventArgs e) + { + SucceedEndGame?.Invoke(sender, e); + } + + public void OnFailedEndGameEvent(object sender, GeneralEventArgs e) + { + FailedEndGame?.Invoke(sender, e); + } } } diff --git a/FunGame.Desktop/UI/Main/Main.cs b/FunGame.Desktop/UI/Main/Main.cs index f7dc7e4..4473d22 100644 --- a/FunGame.Desktop/UI/Main/Main.cs +++ b/FunGame.Desktop/UI/Main/Main.cs @@ -512,15 +512,32 @@ namespace Milimoe.FunGame.Desktop.UI /// /// 游戏结束,结算 /// - private void EndGame(Room room, List users) + private void EndGame(params object[] args) { - Visible = true; - // test - WritelnGameInfo("===== TEST ====="); - SetButtonEnabled(true, ClientState.InRoom); - _InGame = false; - WritelnGameInfo("游戏结束!" + " [ " + users[new Random().Next(users.Count)] + " ] " + "是赢家!"); - RunTime.Controller?.EndGame(); + // 触发事件 如果before事件返回false 则不能认定为游戏结束 + GeneralEventArgs e = new(args); + OnBeforeEndGameEvent(this, e); + RunTime.PluginLoader?.OnBeforeEndGameEvent(this, e); + if (e.Cancel) + { + return; + } + if (RunTime.Controller?.EndGame() ?? false) + { + // 恢复界面 + Visible = true; + _InGame = false; + SetButtonEnabled(true, ClientState.InRoom); + OnSucceedEndGameEvent(this, e); + RunTime.PluginLoader?.OnSucceedEndGameEvent(this, e); + } + else + { + OnFailedEndGameEvent(this, e); + RunTime.PluginLoader?.OnFailedEndGameEvent(this, e); + } + OnAfterEndGameEvent(this, e); + RunTime.PluginLoader?.OnAfterEndGameEvent(this, e); } ///