Files
wwdpublic/Content.Client/JoinQueue/QueueState.cs
DEATHB4DEFEAT d4663e9993 Port Queue and Discord Auth From Corvax (#355)
# Description

I didn't make 2 PRs because the queue kinda depends on Discord auth and
I didn't wanna spend the time splitting them up.

The queue puts everyone except admins/whitelisted/previously in-game
players into a queue after the soft max players is reached, hard cap
still denies new connections (and queues) from everyone.
Priority queuing is simple to add and I'll do that when I make donator
benefits or whatever similar system.

---

<details><summary><h1>Media</h1></summary>
<p>

Too big to embed and I don't wanna compress it :)

https://youtu.be/NBqN6Piv94w

</p>
</details>

---

# Changelog

🆑
- add: Added a queue for players so you don't need to spam reconnect and
hope you join when someone leaves.
2024-05-13 00:58:39 -04:00

55 lines
1.2 KiB
C#

using Content.Shared.JoinQueue;
using Robust.Client.Audio;
using Robust.Client.Console;
using Robust.Client.State;
using Robust.Client.UserInterface;
using Robust.Shared.Player;
namespace Content.Client.JoinQueue;
public sealed class QueueState : State
{
[Dependency] private readonly IUserInterfaceManager _userInterface = default!;
[Dependency] private readonly IClientConsoleHost _console = default!;
private const string JoinSoundPath = "/Audio/Effects/newplayerping.ogg";
private QueueGui? _gui;
protected override void Startup()
{
_gui = new QueueGui();
_userInterface.StateRoot.AddChild(_gui);
_gui.QuitPressed += OnQuitPressed;
}
protected override void Shutdown()
{
_gui!.QuitPressed -= OnQuitPressed;
_gui.Dispose();
Ding();
}
public void OnQueueUpdate(QueueUpdateMessage msg)
{
_gui?.UpdateInfo(msg.Total, msg.Position);
}
private void OnQuitPressed()
{
_console.ExecuteCommand("quit");
}
private void Ding()
{
if (IoCManager.Resolve<IEntityManager>().TrySystem<AudioSystem>(out var audio))
audio.PlayGlobal(JoinSoundPath, Filter.Local(), false);
}
}