完善EndGame的预留接口

This commit is contained in:
milimoe 2023-12-18 20:08:04 +08:00
parent 699bd1888a
commit 6cd709ea0b
Signed by: milimoe
GPG Key ID: 05D280912DA6C69E
2 changed files with 51 additions and 9 deletions

View File

@ -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);
}
}
}

View File

@ -512,15 +512,32 @@ namespace Milimoe.FunGame.Desktop.UI
/// <summary>
/// 游戏结束,结算
/// </summary>
private void EndGame(Room room, List<User> users)
private void EndGame(params object[] args)
{
// 触发事件 如果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;
// test
WritelnGameInfo("===== TEST =====");
SetButtonEnabled(true, ClientState.InRoom);
_InGame = false;
WritelnGameInfo("游戏结束!" + " [ " + users[new Random().Next(users.Count)] + " ] " + "是赢家!");
RunTime.Controller?.EndGame();
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);
}
/// <summary>