Vote type delay, code comments.

Added doc comments to server side voting API.
There is now a 4 minute delay between creating votes of the same type.
Shuffled some code around.
Made a StandardVoteType enum instead of string IDs.
This commit is contained in:
Pieter-Jan Briers
2021-07-21 19:03:10 +02:00
parent 1187185b89
commit e9af56c7c3
13 changed files with 348 additions and 49 deletions

View File

@@ -1,4 +1,5 @@
using Content.Client.Stylesheets;
using Content.Shared.Voting;
using JetBrains.Annotations;
using Robust.Client.AutoGenerated;
using Robust.Client.Console;
@@ -9,6 +10,7 @@ using Robust.Shared.Console;
using Robust.Shared.IoC;
using Robust.Shared.Localization;
using Robust.Shared.Maths;
using Robust.Shared.Timing;
namespace Content.Client.Voting.UI
{
@@ -16,12 +18,15 @@ namespace Content.Client.Voting.UI
public partial class VoteCallMenu : BaseWindow
{
[Dependency] private readonly IClientConsoleHost _consoleHost = default!;
[Dependency] private readonly IVoteManager _voteManager = default!;
[Dependency] private readonly IGameTiming _gameTiming = default!;
public static readonly (string name, string id, (string name, string id)[]? secondaries)[] AvailableVoteTypes =
{
("ui-vote-type-restart", "restart", null),
("ui-vote-type-gamemode", "preset", null)
};
public static readonly (string name, StandardVoteType type, (string name, string id)[]? secondaries)[]
AvailableVoteTypes =
{
("ui-vote-type-restart", StandardVoteType.Restart, null),
("ui-vote-type-gamemode", StandardVoteType.Preset, null)
};
public VoteCallMenu()
{
@@ -42,6 +47,33 @@ namespace Content.Client.Voting.UI
CreateButton.OnPressed += CreatePressed;
}
protected override void Opened()
{
base.Opened();
_voteManager.CanCallVoteChanged += CanCallVoteChanged;
}
public override void Close()
{
base.Close();
_voteManager.CanCallVoteChanged -= CanCallVoteChanged;
}
protected override void FrameUpdate(FrameEventArgs args)
{
base.FrameUpdate(args);
UpdateVoteTimeout();
}
private void CanCallVoteChanged(bool obj)
{
if (!obj)
Close();
}
private void CreatePressed(BaseButton.ButtonEventArgs obj)
{
var typeId = VoteTypeButton.SelectedId;
@@ -62,6 +94,20 @@ namespace Content.Client.Voting.UI
Close();
}
private void UpdateVoteTimeout()
{
var (_, typeKey, _) = AvailableVoteTypes[VoteTypeButton.SelectedId];
var isAvailable = _voteManager.CanCallStandardVote(typeKey, out var timeout);
CreateButton.Disabled = !isAvailable;
VoteTypeTimeoutLabel.Visible = !isAvailable;
if (!isAvailable)
{
var remaining = timeout - _gameTiming.RealTime;
VoteTypeTimeoutLabel.Text = Loc.GetString("ui-vote-type-timeout", ("remaining", remaining.ToString("mm\\:ss")));
}
}
private static void VoteSecondSelected(OptionButton.ItemSelectedEventArgs obj)
{
obj.Button.SelectId(obj.Id);