完善StartGame和EndGame (#24)

* 更换ShowMessageType引用

* 更新SocketHandler_System

* ShowMessage时需要也显示在公屏上

* 完善开始游戏

* 添加EndGame
This commit is contained in:
milimoe 2023-11-24 18:38:44 +08:00 committed by GitHub
parent d3ac188fa0
commit 0cb1481d33
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 127 additions and 50 deletions

View File

@ -6,7 +6,6 @@ using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Library.Exception;
using Milimoe.FunGame.Core.Library.SQLScript.Common;
using Milimoe.FunGame.Core.Library.SQLScript.Entity;
using Milimoe.FunGame.Desktop.Library;
using Milimoe.FunGame.Desktop.Library.Component;
using Milimoe.FunGame.Desktop.Model;
using Milimoe.FunGame.Desktop.UI;

View File

@ -304,7 +304,7 @@ namespace Milimoe.FunGame.Desktop.Controller
await StartGameRequest.SendRequestAsync();
if (StartGameRequest.Result == RequestResult.Success)
{
return true;
return StartGameRequest.GetResult<bool>("result");
}
}
catch (Exception e)

View File

@ -150,14 +150,16 @@ namespace Milimoe.FunGame.Desktop.Controller
protected override void SocketHandler_System(SocketObject ServerMessage)
{
// 收到系统消息,可输出消息或弹窗
string msg = "";
ShowMessageType type = ShowMessageType.None;
string msg = "";
string title = "系统消息";
int autoclose = 60;
if (ServerMessage.Parameters.Length > 0) msg = ServerMessage.GetParam<string>(0) ?? "";
if (ServerMessage.Parameters.Length > 1) type = ServerMessage.GetParam<ShowMessageType>(1);
if (ServerMessage.Parameters.Length > 2) autoclose = ServerMessage.GetParam<int>(2);
if (type == ShowMessageType.None) Main.GetMessage(msg);
else Main.ShowMessage(type, msg, "系统消息", autoclose);
if (ServerMessage.Parameters.Length > 0) type = ServerMessage.GetParam<ShowMessageType>(0);
if (ServerMessage.Parameters.Length > 1) msg = ServerMessage.GetParam<string>(1) ?? "";
if (ServerMessage.Parameters.Length > 2) title = ServerMessage.GetParam<string>(2) ?? title;
if (ServerMessage.Parameters.Length > 3) autoclose = ServerMessage.GetParam<int>(3);
Main.GetMessage(msg);
if (type != ShowMessageType.None) Main.ShowMessage(type, msg, title, autoclose);
}
protected override void SocketHandler_HeartBeat(SocketObject ServerMessage)
@ -218,5 +220,29 @@ namespace Milimoe.FunGame.Desktop.Controller
}
Main.UpdateUI(MainInvokeType.MatchRoom, StartMatchState.Cancel);
}
protected override void SocketHandler_StartGame(SocketObject ServerMessage)
{
// 游戏即将开始
Room room = General.HallInstance;
List<User> users = new();
if (ServerMessage.Length > 0) room = ServerMessage.GetParam<Room>(0) ?? General.HallInstance;
if (ServerMessage.Length > 1) users = ServerMessage.GetParam<List<User>>(1) ?? users;
Main.UpdateUI(MainInvokeType.StartGame, room, users);
}
protected override void SocketHandler_EndGame(SocketObject ServerMessage)
{
Room room = General.HallInstance;
List<User> users = new();
if (ServerMessage.Length > 0) room = ServerMessage.GetParam<Room>(0) ?? General.HallInstance;
if (ServerMessage.Length > 1) users = ServerMessage.GetParam<List<User>>(1) ?? users;
Main.UpdateUI(MainInvokeType.EndGame, room, users);
}
protected override void SocketHandler_Gaming(SocketObject ServerMessage)
{
}
}
}

View File

@ -74,18 +74,4 @@ namespace Milimoe.FunGame.Desktop.Library
FunGame_AutoRetryOff
};
}
public enum ShowMessageType
{
None,
General,
Tip,
Warning,
Error,
YesNo,
OKCancel,
RetryCancel,
Input,
InputCancel
}
}

View File

@ -2,7 +2,6 @@
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Library.Exception;
using Milimoe.FunGame.Desktop.Controller;
using Milimoe.FunGame.Desktop.Library;
using Milimoe.FunGame.Desktop.Model;
namespace Milimoe.FunGame.Desktop.UI

View File

@ -3,7 +3,6 @@ using Milimoe.FunGame.Core.Library.Common.Event;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Library.Exception;
using Milimoe.FunGame.Desktop.Controller;
using Milimoe.FunGame.Desktop.Library;
using Milimoe.FunGame.Desktop.Library.Base;
using Milimoe.FunGame.Desktop.Model;
using Milimoe.FunGame.Desktop.Utility;

View File

@ -30,6 +30,7 @@ namespace Milimoe.FunGame.Desktop.UI
private readonly Core.Model.RoomList Rooms = RunTime.RoomList;
private readonly Core.Model.Session Usercfg = RunTime.Session;
private int _MatchSeconds = 0; // 记录匹配房间的秒数
private bool _InGame = false;
public Main()
{
@ -252,6 +253,24 @@ namespace Milimoe.FunGame.Desktop.UI
}
break;
case MainInvokeType.StartGame:
if (objs != null && objs.Length > 0)
{
Room room = (Room)objs[0];
List<User> users = (List<User>)objs[1];
StartGame(room, users);
}
break;
case MainInvokeType.EndGame:
if (objs != null && objs.Length > 0)
{
Room room = (Room)objs[0];
List<User> users = (List<User>)objs[1];
EndGame(room, users);
}
break;
default:
break;
}
@ -447,6 +466,37 @@ namespace Milimoe.FunGame.Desktop.UI
SetButtonEnableIfLogon(true, ClientState.InRoom);
}
/// <summary>
/// 开始游戏
/// </summary>
private void StartGame(Room room, List<User> users)
{
_InGame = true;
TaskUtility.NewTask(async () =>
{
int PlayerCount = users.Count;
for (int i = 10; i > 0; i--)
{
WritelnGameInfo("房间 [ " + room.Roomid + " (" + PlayerCount + "人" + GameMode.GetTypeString(room.RoomType) + ") ] 的游戏将在" + i + "秒后开始...");
await Task.Delay(1000);
}
WritelnGameInfo("房间 [ " + room.Roomid + " (" + PlayerCount + "人" + GameMode.GetTypeString(room.RoomType) + ") ] 的游戏正式开始!");
});
SetButtonEnableIfLogon(false, ClientState.InRoom);
}
/// <summary>
/// 游戏结束,结算
/// </summary>
private void EndGame(Room room, List<User> users)
{
// test
WritelnGameInfo("===== TEST =====");
SetButtonEnableIfLogon(true, ClientState.InRoom);
_InGame = false;
WritelnGameInfo("游戏结束!" + " [ " + users[new Random().Next(users.Count)] + " ] " + "是赢家!");
}
/// <summary>
/// 未登录和离线时,停用按钮
/// 登录的时候要激活按钮
@ -455,6 +505,24 @@ namespace Milimoe.FunGame.Desktop.UI
/// <param name="status">客户端状态</param>
private void SetButtonEnableIfLogon(bool isLogon, ClientState status)
{
if (_InGame)
{
AccountSetting.Enabled = isLogon;
Stock.Enabled = isLogon;
Store.Enabled = isLogon;
RoomBox.Enabled = isLogon;
RefreshRoomList.Enabled = isLogon;
CheckMix.Enabled = isLogon;
CheckTeam.Enabled = isLogon;
CheckHasPass.Enabled = isLogon;
QuitRoom.Enabled = isLogon;
RoomSetting.Enabled = isLogon;
PresetText.Enabled = isLogon;
TalkText.Enabled = isLogon;
SendTalkText.Enabled = isLogon;
Logout.Enabled = isLogon;
if (!isLogon) return;
}
switch (status)
{
case ClientState.WaitConnect:
@ -904,25 +972,6 @@ namespace Milimoe.FunGame.Desktop.UI
});
}
/// <summary>
/// 鼠标离开停止匹配按钮时,恢复按钮文本为匹配时长
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <exception cref="NotImplementedException"></exception>
private void StopMatch_MouseLeave(object? sender, EventArgs e) => SetMatchSecondsText();
/// <summary>
/// 鼠标轻触停止匹配按钮时,将文本从匹配时长转为停止匹配
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <exception cref="NotImplementedException"></exception>
private void StopMatch_MouseHover(object? sender, EventArgs e)
{
StopMatch.Text = "停止匹配";
}
#endregion
#region
@ -1255,6 +1304,25 @@ namespace Milimoe.FunGame.Desktop.UI
});
}
/// <summary>
/// 鼠标离开停止匹配按钮时,恢复按钮文本为匹配时长
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <exception cref="NotImplementedException"></exception>
private void StopMatch_MouseLeave(object? sender, EventArgs e) => SetMatchSecondsText();
/// <summary>
/// 鼠标轻触停止匹配按钮时,将文本从匹配时长转为停止匹配
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
/// <exception cref="NotImplementedException"></exception>
private void StopMatch_MouseHover(object? sender, EventArgs e)
{
StopMatch.Text = "停止匹配";
}
/// <summary>
/// 关闭主界面
/// </summary>

View File

@ -1,8 +1,8 @@
using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Library.Common.Event;
using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Library.Exception;
using Milimoe.FunGame.Desktop.Controller;
using Milimoe.FunGame.Desktop.Library;
using Milimoe.FunGame.Desktop.Library.Base;
using Milimoe.FunGame.Desktop.Model;