Boot screen

This commit is contained in:
2024-08-09 14:14:51 +08:00
parent 34100ee727
commit 40b0f2e176
7 changed files with 126 additions and 24 deletions

40
Scripts/UI/BootScreen.cs Normal file
View File

@ -0,0 +1,40 @@
using AceField.Scripts.Logic;
using Godot;
namespace AceField.Scripts.UI;
public partial class BootScreen : Control
{
[Export] public World World;
[Export] public Button StartGameButton;
[Export] public LineEdit PlayerNameInput;
[Export] public Label PlayerCountLabel;
[Signal]
public delegate void StartGameEventHandler();
public override void _Ready()
{
StartGameButton.Pressed += () => { Rpc(nameof(Start)); };
}
public override void _Process(double delta)
{
var count = Multiplayer.GetPeers().Length;
PlayerCountLabel.Text = $"{(count + 1):00}/{16}";
StartGameButton.Disabled = !Multiplayer.IsServer();
}
[Rpc(MultiplayerApi.RpcMode.AnyPeer, CallLocal = true)]
private void Start()
{
EmitSignal(SignalName.StartGame);
var name = string.IsNullOrEmpty(PlayerNameInput.Text) ? null : PlayerNameInput.Text;
// TODO Fix this I don't know why the first round player's name won't fully apply
World.Scoreboard.SetName(Multiplayer.GetUniqueId(), name);
World.StartGame(currentPlayerName: name);
Hide();
}
}

View File

@ -8,8 +8,7 @@ public partial class LaunchScreen : Control
[Export] public string DefaultServerAddr = "127.0.0.1";
[Export] public Launcher Launcher;
[Export] public LineEdit PlayerNameInput;
[Export] public LineEdit ServerPortInput;
[Export] public LineEdit ServerAddrInput;
[Export] public Button StartAsServerButton;
@ -51,8 +50,7 @@ public partial class LaunchScreen : Control
}
var port = ServerPortInput.Text;
var name = string.IsNullOrEmpty(PlayerNameInput.Text) ? null : PlayerNameInput.Text;
var result = Launcher.StartAsServer(int.Parse(port), currentPlayerName: name);
var result = Launcher.StartAsServer(int.Parse(port));
if (result)
Hide();
@ -67,8 +65,7 @@ public partial class LaunchScreen : Control
var addr = ServerAddrInput.Text;
var port = ServerPortInput.Text;
var name = string.IsNullOrEmpty(PlayerNameInput.Text) ? null : PlayerNameInput.Text;
var result = Launcher.StartAsClient(addr, int.Parse(port), currentPlayerName: name);
var result = Launcher.StartAsClient(addr, int.Parse(port));
if (result)
Hide();