Files
Delta-v/Content.Client/_DV/Reputation/UI/UnlockLabel.cs
T
ac1b82d406 traitor reputation real (#2913)
* add reputation system

* add contracts button to PDA

* give traitors contracts

* add GetRandomObjective to SharedObjectivesSystem

* add TryRemoveObjective overload

* add everything needed for reputation store and objectives

* "ui"

* giant uplink reputation tagging

* prevent buying reputation-locked gear with uplink implant

* :trollface:

* more ui stuff

* :trollface:

* :trollface:

* remove default objectives

* :trollface:

* UI fixes

* stuff

* objective component changes

* add offerings and stuff to yml

* make some objectives work

* make rcd objective real

* more ui fix

* :trollface:

* ui usable

* bunch of low risk objectives

* syndie jail wip

* more wip

* massive amount of work

* add bad guidebooks

* prevent fultoning anchored things

* fixes

* disable claim buttons when no slots are open

* :trollface:

* :trollface:

* :trollface:

* update ui when a slot unlocks

* move rejecting to offerings, remove rescan (automatic now)

* add verb to attach fulton, fix

* dont get objective to ransom/kill someone you already ransomed

* make offering slots random + maximum count in rep level

* :trollface:

* rela

* update syndie jail

* more syndie jail update

* make marshal real

* fix

* fix power room power

* remove access from timer

* :trollface:

* engine

* allow syndicate items on syndie jail

* add ransom ui

* update map loading

* add ransom purchasing to cargo request console

* warn not error for loading

* ui fixes

* final fixy

* mg book fix

* final fixy II

* remove redundant Announcement word

* more []

* end ransom when leaving the jail

* :trollface:

* 10 tc for roundstart traitors

* make nuke core objective work for traitor

* guidebook gaming

* early merge of guidebook comments

* update bunch of objectives

* add min reputation to kill fellow traitor

* guidebook gaming

* evil

* giant stuff

* dont offer dupe objectives

* evil

* pronoun

* fix

* grr

* blacklist assist and DAGD from assist objective

* grr

* fix linter

* remove objectives from traitor rule test

* nuke disk anti-troll

* evil test

* add objectives test to find bad objective groups

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* fixy

* fix

* fix stuff

* reword ransom announcement

* pro

* goida

---------

Signed-off-by: deltanedas <39013340+deltanedas@users.noreply.github.com>
Co-authored-by: deltanedas <@deltanedas:kde.org>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2025-05-12 17:16:22 -04:00

74 lines
1.6 KiB
C#

using Robust.Client.UserInterface.Controls;
using Robust.Shared.Timing;
namespace Content.Client._DV.Reputation.UI;
/// <summary>
/// Label that updates for an unlock timer automatically.
/// </summary>
public sealed class UnlockLabel : Label
{
[Dependency] private readonly IGameTiming _timing = default!;
public event Action? OnUnlock;
private TimeSpan? _nextUnlock;
private TimeSpan _nextUpdate;
public TimeSpan? NextUnlock
{
get
{
return _nextUnlock;
}
set
{
_nextUnlock = value;
_nextUpdate = _timing.CurTime;
UpdateUnlock();
}
}
public bool IsLocked => Visible;
public UnlockLabel()
{
IoCManager.InjectDependencies(this);
Visible = false;
}
private void UpdateUnlock()
{
if (_nextUnlock is not {} next)
return;
var now = _timing.CurTime;
if (now >= next)
{
// unlocked now
_nextUnlock = null;
Visible = false;
OnUnlock?.Invoke();
return;
}
Visible = true;
var remaining = next - now;
var time = $"{remaining.Minutes:00}:{remaining.Seconds:00}";
Text = Loc.GetString("contract-next-unlock", ("time", time));
}
protected override void FrameUpdate(FrameEventArgs args)
{
base.FrameUpdate(args);
var now = _timing.CurTime;
if (now < _nextUpdate)
return;
_nextUpdate = now + TimeSpan.FromSeconds(1);
UpdateUnlock();
}
}