dev: 更新代码,并准备LuaMod

This commit is contained in:
ZZY
2025-06-14 14:38:28 +08:00
parent 3fa39fc71e
commit 13450ea09a
20 changed files with 486 additions and 397 deletions

View File

@ -1,140 +1,60 @@
#nullable disable
using Godot;
using Godot.Collections;
public partial class GameLobby : Control {
GlobalManager global = GlobalManager.Instance;
Timer timer = null;
readonly Logging.Logger logger = Logging.GetLogger("GameLobby");
Timer timer = null!;
ItemList lists = null;
ConfirmationDialog dialog = null;
string URL;
string userName;
bool isAcceptedPart = false;
ItemList lists = null!;
ConfirmationDialog dialog = null!;
string URL = null!;
string userName = null!;
// Called when the node enters the scene tree for the first time.
public override void _Ready() {
lists = GetNode<ItemList>("MarginContainer/VBoxContainer/MarginContainer3/ItemList");
lists = GetNode<ItemList>("%ItemList_Users");
// TODO using %
dialog = GetNode<ConfirmationDialog>("Dialogs/ConfirmationDialog");
URL = global.ConfigManager.GetValue<string>("server_url");
URL = global.ConfigManager.GetValue<string>("server_addr");
userName = global.ConfigManager.GetValue<string>("user_name");
dialog.MinSize = new Vector2I(400, 200);
dialog.DialogAutowrap = true;
dialog.Canceled += () => {
// if (dialog.Title == "Session Created")
// global.RPClient.SessionAckCreate(dialog.GetMeta("sessionId").ToString(), false);
};
// TODO Cancel to Accept Session Create
};
dialog.Confirmed += () => {
if (dialog.Title == "Session Created") {
// FIXME
isAcceptedPart = true;
// global.RPClient.SessionAckCreate(dialog.GetMeta("sessionId").ToString(), true);
// TODO Create Session
}
};
// global.RPClient.OnOpen += (eventName, args) => {
// global.RPClient.UserInit(userName, "godot chessboard", () => {
// global.RPClient.UserRename(userName);
// return global.RPClient.RegionAdd("server");
// });
// };
// global.RPClient.OnOpen += (eventName, args) => {
// global.RPClient.UserInit(userName, "none", () => {
// GD.PrintErr($"User Init Success");
// return true;
// });
// // global.RPClient.UserRename(userName);
// };
// global.RPClient.RegSessionAckCreateCallback((sessionId, res, reqUserId, reqUserName) => {
// if (reqUserId != null) {
// dialog.Title = "Session Created";
// dialog.SetMeta("reqUserName", reqUserName);
// dialog.SetMeta("reqUserId", reqUserId);
// dialog.SetMeta("sessionId", sessionId);
// // dialog.GetLabel==>Text = $"{sessdata["reqUserName"]}";
// dialog.DialogText = $"username: {reqUserName}\n" +
// $"reqUserId: {reqUserId}\n";
// dialog.Visible = true;
// } else {
// if (res) {
// // TODO FIXME
// global.sessionId = sessionId;
// if (!isAcceptedPart) {
// global.GlobalData["player_color"] = "red";
// } else {
// global.GlobalData["player_color"] = "black";
// }
// // GD.PrintErr("sessionId: ", reqUserId, "color: ", global.GlobalData["player_color"].AsString());
// global.GotoScene("res://Scenes/ChessGame.tscn");
// } else {
// dialog.Title = "Failed";
// dialog.DialogText = $"session create failed";
// dialog.Visible = true;
// }
// }
// return true;
// });
// timer = new Timer();
// AddChild(timer);
// TODO using new State Shower And Using Heartbeat to calucate the delay time
ColorRect colorRect = GetNode<ColorRect>("MarginContainer/VBoxContainer/MarginContainer2/MarginContainer2/ColorRect");
// timer.Connect("timeout", Callable.From(() => {
// if (global.RPClient.GetIsConnected()) {
// colorRect.Color = Colors.Green;
// } else {
// colorRect.Color = Colors.Red;
// }
// FlushData();
// }));
// timer.Start(1);
Connect();
}
public void Connect() {
GD.Print("Connect");
// if (global.RPClient.GetIsConnected()) {
// return;
// }
// global.RPClient.ExitServer();
// global.RPClient.ConnectToUrlEx(URL);
logger.Info("Connect To Server");
// TODO connet to server
global.SetProcess(true);
}
private void OnItemSelected(int index) {
Dictionary item = lists.GetItemMetadata(index).AsGodotDictionary();
GD.Print($"Item {index} selected, {item}");
string[] strings = { item["id"].ToString() };
// global.RPClient.SessionCreate(strings);
}
Dictionary item = lists.GetItemMetadata(index).AsGodotDictionary();
logger.Debug($"Item {index} selected, {item}");
string[] _ = [item["id"].ToString()];
// TODO new a Session
}
private void FlushData() {
// global.RPClient.RegionInspect("server", (data) => {
// // GD.Print(data);
// lists?.Clear();
// foreach (Dictionary<string, string> user in data) {
// string userId = user["id"].ToString();
// string userName = user["name"].ToString();
// if (userId == global.RPClient.GetUserId()) {
// lists.SetItemDisabled(
// lists.AddItem($"Name: {userName}"),
// true);
// continue;
// }
// var idx = lists.AddItem($"Name: {userName}");
// lists.SetItemMetadata(idx, user);
// lists.SetItemTooltip(idx, $"User ID: {userId}");
// }
// return true;
// });
private void FlushUserData() {
// TODO Flush user data or heartbeat flush
}
private void OnBack() {
// global.RPClient.ExitServer();
global.GotoScene("res://Main.tscn");
// TODO ExitServer();
global.GotoScene("res://Main.tscn");
}
}