完善GameMode和GameMap的运用

This commit is contained in:
milimoe 2023-11-28 23:23:26 +08:00
parent 760c81e0ae
commit 54ca623c7f
Signed by: milimoe
GPG Key ID: 05D280912DA6C69E
3 changed files with 63 additions and 52 deletions

View File

@ -9,31 +9,17 @@ using Milimoe.FunGame.Desktop.UI;
namespace Milimoe.FunGame.Desktop.Controller namespace Milimoe.FunGame.Desktop.Controller
{ {
public class MainController public class MainController(Main main)
{ {
private readonly Main Main;
private readonly Session Usercfg = RunTime.Session; private readonly Session Usercfg = RunTime.Session;
private readonly DataRequest ChatRequest; private readonly DataRequest ChatRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Main_Chat);
private readonly DataRequest CreateRoomRequest; private readonly DataRequest CreateRoomRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Main_CreateRoom);
private readonly DataRequest MatchRoomRequest; private readonly DataRequest MatchRoomRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Main_MatchRoom);
private readonly DataRequest GetRoomPlayerCountRequest; private readonly DataRequest GetRoomPlayerCountRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Room_GetRoomPlayerCount);
private readonly DataRequest UpdateRoomRequest; private readonly DataRequest UpdateRoomRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Main_UpdateRoom);
private readonly DataRequest IntoRoomRequest; private readonly DataRequest IntoRoomRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Main_IntoRoom);
private readonly DataRequest QuitRoomRequest; private readonly DataRequest QuitRoomRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Main_QuitRoom);
private readonly DataRequest StartGameRequest; private readonly DataRequest StartGameRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Main_StartGame);
public MainController(Main main)
{
Main = main;
ChatRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Main_Chat);
CreateRoomRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Main_CreateRoom);
MatchRoomRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Main_MatchRoom);
GetRoomPlayerCountRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Room_GetRoomPlayerCount);
UpdateRoomRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Main_UpdateRoom);
IntoRoomRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Main_IntoRoom);
QuitRoomRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Main_QuitRoom);
StartGameRequest = RunTime.NewLongRunningDataRequest(DataRequestType.Main_StartGame);
}
#region #region
@ -67,7 +53,7 @@ namespace Milimoe.FunGame.Desktop.Controller
if (key == Usercfg.LoginKey) if (key == Usercfg.LoginKey)
{ {
Usercfg.LoginKey = Guid.Empty; Usercfg.LoginKey = Guid.Empty;
Main.UpdateUI(MainInvokeType.LogOut, msg ?? ""); main.UpdateUI(MainInvokeType.LogOut, msg ?? "");
return true; return true;
} }
} }
@ -76,8 +62,8 @@ namespace Milimoe.FunGame.Desktop.Controller
} }
catch (Exception e) catch (Exception e)
{ {
Main.ShowMessage(ShowMessageType.Error, "无法登出您的账号,请联系服务器管理员。", "登出失败", 5); main.ShowMessage(ShowMessageType.Error, "无法登出您的账号,请联系服务器管理员。", "登出失败", 5);
Main.GetMessage(e.GetErrorInfo()); main.GetMessage(e.GetErrorInfo());
} }
return false; return false;
} }
@ -96,7 +82,7 @@ namespace Milimoe.FunGame.Desktop.Controller
} }
catch (Exception e) catch (Exception e)
{ {
Main.GetMessage(e.GetErrorInfo(), TimeType.None); main.GetMessage(e.GetErrorInfo(), TimeType.None);
return false; return false;
} }
} }
@ -112,13 +98,13 @@ namespace Milimoe.FunGame.Desktop.Controller
if (UpdateRoomRequest.Result == RequestResult.Success) if (UpdateRoomRequest.Result == RequestResult.Success)
{ {
list = UpdateRoomRequest.GetResult<List<Room>>("rooms") ?? new(); list = UpdateRoomRequest.GetResult<List<Room>>("rooms") ?? new();
Main.UpdateUI(MainInvokeType.UpdateRoom, list); main.UpdateUI(MainInvokeType.UpdateRoom, list);
} }
else throw new CanNotIntoRoomException(); else throw new CanNotIntoRoomException();
} }
catch (Exception e) catch (Exception e)
{ {
Main.GetMessage(e.GetErrorInfo(), TimeType.None); main.GetMessage(e.GetErrorInfo(), TimeType.None);
} }
return result; return result;
@ -134,7 +120,7 @@ namespace Milimoe.FunGame.Desktop.Controller
} }
catch (Exception e) catch (Exception e)
{ {
Main.GetMessage(e.GetErrorInfo(), TimeType.None); main.GetMessage(e.GetErrorInfo(), TimeType.None);
return 0; return 0;
} }
} }
@ -154,19 +140,19 @@ namespace Milimoe.FunGame.Desktop.Controller
if (result) if (result)
{ {
Config.FunGame_isInRoom = true; Config.FunGame_isInRoom = true;
Main.GetMessage("[ " + Usercfg.LoginUser.Username + " ] 准备完毕。"); main.GetMessage("[ " + Usercfg.LoginUser.Username + " ] 准备完毕。");
} }
List<User> ReadyPlayerList = request.GetResult<List<User>>("ready") ?? new(); List<User> ReadyPlayerList = request.GetResult<List<User>>("ready") ?? new();
if (ReadyPlayerList.Count > 0) Main.GetMessage("已准备的玩家:" + string.Join(", ", ReadyPlayerList.Select(u => u.Username))); if (ReadyPlayerList.Count > 0) main.GetMessage("已准备的玩家:" + string.Join(", ", ReadyPlayerList.Select(u => u.Username)));
List<User> NotReadyPlayerList = request.GetResult<List<User>>("notready") ?? new(); List<User> NotReadyPlayerList = request.GetResult<List<User>>("notready") ?? new();
if (NotReadyPlayerList.Count > 0) Main.GetMessage("仍未准备的玩家:" + string.Join(", ", NotReadyPlayerList.Select(u => u.Username))); if (NotReadyPlayerList.Count > 0) main.GetMessage("仍未准备的玩家:" + string.Join(", ", NotReadyPlayerList.Select(u => u.Username)));
} }
request.Dispose(); request.Dispose();
return result; return result;
} }
catch (Exception e) catch (Exception e)
{ {
Main.GetMessage(e.GetErrorInfo(), TimeType.None); main.GetMessage(e.GetErrorInfo(), TimeType.None);
return false; return false;
} }
} }
@ -186,19 +172,19 @@ namespace Milimoe.FunGame.Desktop.Controller
if (result) if (result)
{ {
Config.FunGame_isInRoom = false; Config.FunGame_isInRoom = false;
Main.GetMessage("[ " + Usercfg.LoginUser.Username + " ] 已取消准备。"); main.GetMessage("[ " + Usercfg.LoginUser.Username + " ] 已取消准备。");
} }
List<User> ReadyPlayerList = request.GetResult<List<User>>("ready") ?? new(); List<User> ReadyPlayerList = request.GetResult<List<User>>("ready") ?? new();
if (ReadyPlayerList.Count > 0) Main.GetMessage("已准备的玩家:" + string.Join(", ", ReadyPlayerList.Select(u => u.Username))); if (ReadyPlayerList.Count > 0) main.GetMessage("已准备的玩家:" + string.Join(", ", ReadyPlayerList.Select(u => u.Username)));
List<User> NotReadyPlayerList = request.GetResult<List<User>>("notready") ?? new(); List<User> NotReadyPlayerList = request.GetResult<List<User>>("notready") ?? new();
if (NotReadyPlayerList.Count > 0) Main.GetMessage("仍未准备的玩家:" + string.Join(", ", NotReadyPlayerList.Select(u => u.Username))); if (NotReadyPlayerList.Count > 0) main.GetMessage("仍未准备的玩家:" + string.Join(", ", NotReadyPlayerList.Select(u => u.Username)));
} }
request.Dispose(); request.Dispose();
return result; return result;
} }
catch (Exception e) catch (Exception e)
{ {
Main.GetMessage(e.GetErrorInfo(), TimeType.None); main.GetMessage(e.GetErrorInfo(), TimeType.None);
return false; return false;
} }
} }
@ -225,18 +211,20 @@ namespace Milimoe.FunGame.Desktop.Controller
} }
catch (Exception e) catch (Exception e)
{ {
Main.GetMessage(e.GetErrorInfo(), TimeType.None); main.GetMessage(e.GetErrorInfo(), TimeType.None);
return result; return result;
} }
} }
public async Task<Room> CreateRoomAsync(string RoomType, string Password = "") public async Task<Room> CreateRoomAsync(string RoomType, string GameMode, string GameMap, string Password = "")
{ {
Room room = General.HallInstance; Room room = General.HallInstance;
try try
{ {
CreateRoomRequest.AddRequestData("roomtype", RoomType); CreateRoomRequest.AddRequestData("roomtype", RoomType);
CreateRoomRequest.AddRequestData("gamemode", GameMode);
CreateRoomRequest.AddRequestData("gamemap", GameMap);
CreateRoomRequest.AddRequestData("master", Usercfg.LoginUser); CreateRoomRequest.AddRequestData("master", Usercfg.LoginUser);
CreateRoomRequest.AddRequestData("password", Password); CreateRoomRequest.AddRequestData("password", Password);
await CreateRoomRequest.SendRequestAsync(); await CreateRoomRequest.SendRequestAsync();
@ -247,7 +235,7 @@ namespace Milimoe.FunGame.Desktop.Controller
} }
catch (Exception e) catch (Exception e)
{ {
Main.GetMessage(e.GetErrorInfo(), TimeType.None); main.GetMessage(e.GetErrorInfo(), TimeType.None);
} }
return room; return room;
@ -270,7 +258,7 @@ namespace Milimoe.FunGame.Desktop.Controller
} }
catch (Exception e) catch (Exception e)
{ {
Main.GetMessage(e.GetErrorInfo(), TimeType.None); main.GetMessage(e.GetErrorInfo(), TimeType.None);
} }
return result; return result;
@ -290,7 +278,7 @@ namespace Milimoe.FunGame.Desktop.Controller
} }
catch (Exception e) catch (Exception e)
{ {
Main.GetMessage(e.GetErrorInfo(), TimeType.None); main.GetMessage(e.GetErrorInfo(), TimeType.None);
return false; return false;
} }
} }
@ -309,7 +297,7 @@ namespace Milimoe.FunGame.Desktop.Controller
} }
catch (Exception e) catch (Exception e)
{ {
Main.GetMessage(e.GetErrorInfo(), TimeType.None); main.GetMessage(e.GetErrorInfo(), TimeType.None);
} }
return false; return false;

View File

@ -261,7 +261,7 @@ namespace Milimoe.FunGame.Desktop.Controller
{ {
// 游戏即将开始 // 游戏即将开始
Room room = General.HallInstance; Room room = General.HallInstance;
List<User> users = new(); List<User> users = [];
if (ServerMessage.Length > 0) room = ServerMessage.GetParam<Room>(0) ?? General.HallInstance; if (ServerMessage.Length > 0) room = ServerMessage.GetParam<Room>(0) ?? General.HallInstance;
if (ServerMessage.Length > 1) users = ServerMessage.GetParam<List<User>>(1) ?? users; if (ServerMessage.Length > 1) users = ServerMessage.GetParam<List<User>>(1) ?? users;
Main.UpdateUI(MainInvokeType.StartGame, room, users); Main.UpdateUI(MainInvokeType.StartGame, room, users);

View File

@ -1,6 +1,7 @@
using System.Diagnostics; using System.Diagnostics;
using Milimoe.FunGame.Core.Api.Utility; using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity; using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Common.Addon;
using Milimoe.FunGame.Core.Library.Common.Event; using Milimoe.FunGame.Core.Library.Common.Event;
using Milimoe.FunGame.Core.Library.Constant; using Milimoe.FunGame.Core.Library.Constant;
using Milimoe.FunGame.Core.Library.Exception; using Milimoe.FunGame.Core.Library.Exception;
@ -483,6 +484,11 @@ namespace Milimoe.FunGame.Desktop.UI
await Task.Delay(1000); await Task.Delay(1000);
} }
WritelnGameInfo("房间 [ " + room.Roomid + " (" + PlayerCount + "人" + RoomSet.GetTypeString(room.RoomType) + ") ] 的游戏正式开始!"); WritelnGameInfo("房间 [ " + room.Roomid + " (" + PlayerCount + "人" + RoomSet.GetTypeString(room.RoomType) + ") ] 的游戏正式开始!");
if (RunTime.GameModeLoader?.Modes.ContainsKey(room.GameMode) ?? false)
{
RunTime.GameModeLoader[room.GameMode].StartUI();
Visible = false; // 隐藏主界面
}
}); });
SetButtonEnableIfLogon(false, ClientState.InRoom); SetButtonEnableIfLogon(false, ClientState.InRoom);
} }
@ -492,6 +498,7 @@ namespace Milimoe.FunGame.Desktop.UI
/// </summary> /// </summary>
private void EndGame(Room room, List<User> users) private void EndGame(Room room, List<User> users)
{ {
Visible = true;
// test // test
WritelnGameInfo("===== TEST ====="); WritelnGameInfo("===== TEST =====");
SetButtonEnableIfLogon(true, ClientState.InRoom); SetButtonEnableIfLogon(true, ClientState.InRoom);
@ -840,14 +847,20 @@ namespace Milimoe.FunGame.Desktop.UI
/// <param name="RoomType"></param> /// <param name="RoomType"></param>
/// <param name="Password"></param> /// <param name="Password"></param>
/// <returns></returns> /// <returns></returns>
private async Task CreateRoom_Handler(string RoomType, string Password = "") private async Task CreateRoom_Handler(string RoomType, string GameMode, string GameMap, string Password = "")
{ {
if (Usercfg.InRoom.Roomid != "-1") if (Usercfg.InRoom.Roomid != "-1")
{ {
ShowMessage(ShowMessageType.Warning, "已在房间中,无法创建房间。"); ShowMessage(ShowMessageType.Warning, "已在房间中,无法创建房间。");
return; return;
} }
Room room = await InvokeController_CreateRoom(RoomType, Password); GameMode? mode = RunTime.GameModeLoader?.Modes.Values.FirstOrDefault() ?? default;
if (mode is null)
{
ShowMessage(ShowMessageType.Error, ">> 缺少" + Config.FunGame_RoomType + "所需的模组,无法创建房间。");
return;
}
Room room = await InvokeController_CreateRoom(RoomType, GameMode, GameMap, Password);
if (MainController is not null && room.Roomid != "-1") if (MainController is not null && room.Roomid != "-1")
{ {
await MainController.UpdateRoomAsync(); await MainController.UpdateRoomAsync();
@ -1038,7 +1051,13 @@ namespace Milimoe.FunGame.Desktop.UI
ShowMessage(ShowMessageType.Warning, "请勾选你要创建的房间类型!"); ShowMessage(ShowMessageType.Warning, "请勾选你要创建的房间类型!");
return; return;
} }
TaskUtility.NewTask(() => CreateRoom_Handler(Config.FunGame_RoomType, password)); GameMode? mode = RunTime.GameModeLoader?.Modes.Values.FirstOrDefault() ?? default;
if (mode is null)
{
ShowMessage(ShowMessageType.Error, ">> 缺少" + Config.FunGame_RoomType + "所需的模组,无法创建房间。");
return;
}
TaskUtility.NewTask(() => CreateRoom_Handler(Config.FunGame_RoomType, mode.Name, mode.DefaultMap, password));
} }
/// <summary> /// <summary>
@ -1474,14 +1493,18 @@ namespace Milimoe.FunGame.Desktop.UI
case Constant.FunGame_CreateMix: case Constant.FunGame_CreateMix:
if (Usercfg.InRoom.Roomid == "-1") if (Usercfg.InRoom.Roomid == "-1")
{ {
TaskUtility.NewTask(() => CreateRoom_Handler(RoomSet.Mix)); GameMode? mode = RunTime.GameModeLoader?.Modes.Values.FirstOrDefault() ?? default;
if (mode != null) TaskUtility.NewTask(() => CreateRoom_Handler(RoomSet.Mix, mode.Name, mode.DefaultMap));
else WritelnGameInfo(">> 缺少" + RoomSet.GetTypeString(RoomType.Mix) + "所需的模组,无法创建房间。");
} }
else WritelnGameInfo(">> 先退出当前房间才可以创建房间。"); else WritelnGameInfo(">> 先退出当前房间才可以创建房间。");
break; break;
case Constant.FunGame_CreateTeam: case Constant.FunGame_CreateTeam:
if (Usercfg.InRoom.Roomid == "-1") if (Usercfg.InRoom.Roomid == "-1")
{ {
TaskUtility.NewTask(() => CreateRoom_Handler(RoomSet.Team)); GameMode? mode = RunTime.GameModeLoader?.Modes.Values.FirstOrDefault() ?? default;
if (mode != null) TaskUtility.NewTask(() => CreateRoom_Handler(RoomSet.Team, mode.Name, mode.DefaultMap));
else WritelnGameInfo(">> 缺少" + RoomSet.GetTypeString(RoomType.Team) + "所需的模组,无法创建房间。");
} }
else WritelnGameInfo(">> 先退出当前房间才可以创建房间。"); else WritelnGameInfo(">> 先退出当前房间才可以创建房间。");
break; break;
@ -1808,7 +1831,7 @@ namespace Milimoe.FunGame.Desktop.UI
/// </summary> /// </summary>
/// <param name="room"></param> /// <param name="room"></param>
/// <returns></returns> /// <returns></returns>
public async Task<Room> InvokeController_CreateRoom(string RoomType, string Password = "") public async Task<Room> InvokeController_CreateRoom(string RoomType, string GameMode, string GameMap, string Password = "")
{ {
RoomEventArgs EventArgs = new(RoomType, Password); RoomEventArgs EventArgs = new(RoomType, Password);
Room room = General.HallInstance; Room room = General.HallInstance;
@ -1819,7 +1842,7 @@ namespace Milimoe.FunGame.Desktop.UI
RunTime.PluginLoader?.OnBeforeCreateRoomEvent(this, EventArgs); RunTime.PluginLoader?.OnBeforeCreateRoomEvent(this, EventArgs);
if (EventArgs.Cancel) return room; if (EventArgs.Cancel) return room;
room = MainController is null ? room : await MainController.CreateRoomAsync(RoomType, Password); room = MainController is null ? room : await MainController.CreateRoomAsync(RoomType, GameMode, GameMap, Password);
if (room.Roomid != "-1") if (room.Roomid != "-1")
{ {