#nullable disable using Godot; using Godot.Collections; public partial class GameLobby : Control { GlobalManager global = GlobalManager.Instance; Timer timer = null; ItemList lists = null; ConfirmationDialog dialog = null; string URL; string userName; bool isAcceptedPart = false; // Called when the node enters the scene tree for the first time. public override void _Ready() { lists = GetNode("MarginContainer/VBoxContainer/MarginContainer3/ItemList"); dialog = GetNode("Dialogs/ConfirmationDialog"); URL = global.ConfigManager.GetValue("server_url"); userName = global.ConfigManager.GetValue("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); }; dialog.Confirmed += () => { if (dialog.Title == "Session Created") { // FIXME isAcceptedPart = true; // global.RPClient.SessionAckCreate(dialog.GetMeta("sessionId").ToString(), true); } }; // 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); ColorRect colorRect = GetNode("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); 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); } private void FlushData() { // global.RPClient.RegionInspect("server", (data) => { // // GD.Print(data); // lists?.Clear(); // foreach (Dictionary 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 OnBack() { // global.RPClient.ExitServer(); global.GotoScene("res://Main.tscn"); } }