From ad713965e550fc17267912cbf461436baa2ff495 Mon Sep 17 00:00:00 2001 From: Joshua Higgins Date: Mon, 8 Dec 2025 22:48:58 -0500 Subject: [PATCH] fix: so many bugs, feat: cancel tournaments --- project.godot | 1 + scripts/AdminControls.cs | 115 +++++++++++++++++++++++------------- scripts/BoardScreen.cs | 73 ++++++++++------------- scripts/BracketScene.cs | 62 ++++--------------- scripts/ConnectButtonUI.cs | 47 ++++++++++++++- scripts/Connection.cs | 114 ++++++++++++++++++++++++++++++++--- scripts/create_join_room.gd | 2 +- 7 files changed, 274 insertions(+), 140 deletions(-) diff --git a/project.godot b/project.godot index 753d3d2..464ee4b 100644 --- a/project.godot +++ b/project.godot @@ -28,6 +28,7 @@ window/size/viewport_width=1280 window/size/viewport_height=720 window/stretch/mode="canvas_items" window/stretch/aspect="expand" +window/vsync/vsync_mode=2 [dotnet] diff --git a/scripts/AdminControls.cs b/scripts/AdminControls.cs index db1129c..a113e31 100644 --- a/scripts/AdminControls.cs +++ b/scripts/AdminControls.cs @@ -10,32 +10,17 @@ public partial class AdminControls : HBoxContainer public override void _Ready() { - Connection.Instance.OnBecomeAdmin += OnBecomeAdmin; - Connection.Instance.OnTournamentEnd += _ => StartTournament.Show(); - Connection.Instance.OnStartTournamentAck += () => StartTournament.Hide(); + Connection.Instance.OnBecomeAdmin += UpdateUI; + Connection.Instance.OnTournamentEnd += UpdateUI; + Connection.Instance.OnStartTournamentAck += UpdateUI; + Connection.Instance.OnCancelTournamentAck += UpdateUI; + Connection.Instance.OnGetDataAcks += UpdateUI; StartTournament.Pressed += () => Connection.Instance.StartTournament(); CancelTournament.Pressed += () => Connection.Instance.CancelTournament(); - if (!Connection.Instance.IsAdmin) - { - StartTournament.Hide(); - CancelTournament.Hide(); - Label.Hide(); - Timeout.Hide(); - } - else if (Connection.Instance.ActiveTournament) - { - StartTournament.Hide(); - } - - Timeout.Value = Connection.Instance.CurrentWaitTimeout; - var time = Connection.Instance.CurrentWaitTimeout.ToString(); - if (time.Length > 3) - { - time = time.Substring(0, 3); - } - Label.Text = "Wait To Move: " + time + "s "; + UpdateUI(); + Timeout.ValueChanged += value => { Connection.Instance.SetTournamentWait((float)value); @@ -52,7 +37,54 @@ public partial class AdminControls : HBoxContainer public override void _ExitTree() { - Connection.Instance.OnBecomeAdmin -= OnBecomeAdmin; + Connection.Instance.OnBecomeAdmin -= UpdateUI; + Connection.Instance.OnTournamentEnd -= UpdateUI; + Connection.Instance.OnStartTournamentAck -= UpdateUI; + Connection.Instance.OnCancelTournamentAck -= UpdateUI; + Connection.Instance.OnGetDataAcks -= UpdateUI; + } + + private void UpdateUI() + { + if (!Connection.Instance.IsAdmin) + { + BecomeAdmin.Show(); + StartTournament.Hide(); + CancelTournament.Hide(); + Label.Hide(); + Timeout.Hide(); + } + else + { + BecomeAdmin.Hide(); + Label.Show(); + Timeout.Show(); + } + + if (Connection.Instance.IsAdmin && Connection.Instance.DemoMode) + { + StartTournament.Hide(); + CancelTournament.Hide(); + } + else if (Connection.Instance.IsAdmin && Connection.Instance.ActiveTournament) + { + StartTournament.Hide(); + CancelTournament.Show(); + } + else if (Connection.Instance.IsAdmin) + { + StartTournament.Show(); + CancelTournament.Hide(); + } + + Timeout.Value = Connection.Instance.CurrentWaitTimeout; + var time = Connection.Instance.CurrentWaitTimeout.ToString(); + if (time.Length > 3) + { + time = time.Substring(0, 3); + } + + Label.Text = "Wait To Move: " + time + "s "; } private void ShowAuthPopup() @@ -66,7 +98,7 @@ public partial class AdminControls : HBoxContainer authWindow.Size = new Vector2I(256, 128); authWindow.CloseRequested += () => { - GetTree().Root.RemoveChild(authWindow); + GetTree().Root.CallDeferred(Node.MethodName.RemoveChild, authWindow); }; var vbox = new VBoxContainer(); @@ -81,12 +113,30 @@ public partial class AdminControls : HBoxContainer passwordBox.PlaceholderText = "Password"; passwordBox.SetCustomMinimumSize(new Vector2(32, 32)); + passwordBox.GuiInput += e => + { + if (passwordBox.HasFocus() && e is InputEventKey inputEventKey && inputEventKey.IsPressed()) + { + if (inputEventKey.KeyLabel == Key.Enter) + { + Connection.Instance.AdminAuth(passwordBox.Text); + GetTree().Root.CallDeferred(Node.MethodName.RemoveChild, authWindow); + GetViewport().SetInputAsHandled(); + } + + if (inputEventKey.KeyLabel == Key.Space) + { + GetViewport().SetInputAsHandled(); + } + } + }; + var button = new Button(); button.Text = "Login"; button.Pressed += () => { Connection.Instance.AdminAuth(passwordBox.Text); - GetTree().Root.RemoveChild(authWindow); + GetTree().Root.CallDeferred(Node.MethodName.RemoveChild, authWindow); }; vbox.AddChild(passwordBox); @@ -96,19 +146,4 @@ public partial class AdminControls : HBoxContainer GetTree().Root.AddChild(authWindow); } - - private void OnBecomeAdmin() - { - BecomeAdmin.Hide(); - if (!Connection.Instance.ActiveTournament) - { - StartTournament.Show(); - } - else - { - CancelTournament.Show(); - } - Label.Show(); - Timeout.Show(); - } } diff --git a/scripts/BoardScreen.cs b/scripts/BoardScreen.cs index 2099f6b..271fa60 100644 --- a/scripts/BoardScreen.cs +++ b/scripts/BoardScreen.cs @@ -1,5 +1,4 @@ using Godot; -using System.Collections.Generic; using System.Linq; public partial class BoardScreen : Node2D @@ -65,11 +64,10 @@ public partial class BoardScreen : Node2D player2Card.GetNode