137 lines
3.8 KiB
C#
137 lines
3.8 KiB
C#
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<Global>("/root/Global");
|
|
nameLineEdit = GetNode<LineEdit>("Name/LineEdit");
|
|
urlLineEdit = GetNode<LineEdit>("URL");
|
|
urlLineEdit.Text = global.URL;
|
|
urlLineEdit.Set("text_submitted", Callable.From(()=>{
|
|
global.URL = urlLineEdit.Text;
|
|
}));
|
|
|
|
lists = GetNode<ItemList>("Server/ItemList");
|
|
dialog = GetNode<ConfirmationDialog>("Dialogs/ConfirmationDialog");
|
|
colorRect = GetNode<ColorRect>("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<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;
|
|
});
|
|
}
|
|
|
|
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}");
|
|
// }
|
|
}
|