using Godot; using Godot.Collections; public partial class Menu : Control { Global global = null; ItemList lists = null; ConfirmationDialog dialog = null; LineEdit nameLineEdit = null; LineEdit urlLineEdit = null; ColorRect colorRect = null; Timer timer = null; // Called when the node enters the scene tree for the first time. public override void _Ready() { global = GetNode("/root/Global"); nameLineEdit = GetNode("Name/LineEdit"); urlLineEdit = GetNode("URL"); urlLineEdit.Text = global.URL; urlLineEdit.Set("text_submitted", Callable.From(()=>{ global.URL = urlLineEdit.Text; })); lists = GetNode("Server/ItemList"); dialog = GetNode("Dialogs/ConfirmationDialog"); colorRect = GetNode("Server/ColorRect"); dialog.DialogAutowrap = true; dialog.MinSize = new Vector2I(400, 200); dialog.Canceled += () => { if (dialog.Title == "Session Created") global.RPClient.SessionAckCreate(dialog.GetMeta("sessionId").ToString(), false); }; dialog.Confirmed += () => { // GD.PrintErr("confirm", dialog.GetLabel().Text); // goToSignle(); if (dialog.Title == "Session Created") global.RPClient.SessionAckCreate(dialog.GetMeta("sessionId").ToString(), true); }; 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) { global.sessionId = sessionId; 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); timer.Connect("timeout", Callable.From(() => { if (global.RPClient.GetIsConnected()) { colorRect.Color = Colors.Green; } else { colorRect.Color = Colors.Red; } })); timer.Start(1); } // Called every frame. 'delta' is the elapsed time since the previous frame. public override void _Process(double delta) { } 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; }); } public void Connect() { GD.Print("Connect"); global.RPClient.ExitServer(); global.RPClient.ConnectToUrlEx(urlLineEdit.Text); global.SetProcess(true); } public void EnterName() { var newLine = nameLineEdit.Text; global.RPClient.UserRename(newLine); nameLineEdit.Text = newLine; } private void goToHome() { global.RPClient.ExitServer(); global.GotoScene("res://Main.tscn"); } // private void OnItemListItemClicked(int index, Vector2 atPosition, int mouse_button_index) // { // GD.Print($"Item {index} clicked at {atPosition} with mouse button index {mouse_button_index}"); // } }