Delta-v/Content.Client/_DV/Salvage/UI/MagnetOfferingWindow.xaml.cs

63 lines
2.1 KiB
C#

using System.Diagnostics;
using Content.Client.Computer;
using Content.Client.UserInterface.Controls;
using Robust.Client.AutoGenerated;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Timing;
using Robust.Client.Graphics;
using Content.Client.Stylesheets;
using Content.Client.Salvage.UI;
using Content.Client.Trigger.Systems;
namespace Content.Client._DV.Salvage.UI;
/// <summary>
/// Variant of OfferingWindow featuring early release button.
/// </summary>
[GenerateTypedNameReferences]
public sealed partial class MagnetOfferingWindow : OfferingWindow
{
public TimeSpan Duration;
public float ReleaseTime;
private readonly MagnetOfferingWindowReleaseButton _releaseButton;
public MagnetOfferingWindow()
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
ProgressionBar.ForegroundStyleBoxOverride = new StyleBoxFlat(Color.FromHex("#C74EBD"));
_releaseButton = new MagnetOfferingWindowReleaseButton();
ProgressionControls.AddChild(_releaseButton);
ProgressionControls.HorizontalExpand = true;
ProgressionControls.SizeFlagsStretchRatio = 20;
}
protected override void FrameUpdate(FrameEventArgs args)
{
base.FrameUpdate(args);
if (Claimed && _progression != null)
{
var remaining = _progression.Value - _timing.CurTime;
if (remaining.TotalSeconds > Duration.TotalSeconds - 3)
_releaseButton.State = MagnetOfferingWindowReleaseButton.ButtonState.Enabling;
else if (remaining.TotalSeconds > ReleaseTime)
_releaseButton.State = MagnetOfferingWindowReleaseButton.ButtonState.Enabled;
else
_releaseButton.State = MagnetOfferingWindowReleaseButton.ButtonState.InProgress;
}
else
_releaseButton.State = MagnetOfferingWindowReleaseButton.ButtonState.Disabled;
}
public void SetButtonPressed(Action<BaseButton.ButtonEventArgs>? releasePressed)
{
_releaseButton.ReleasePressed += releasePressed;
}
}