Files
OldThink/Content.Client/_White/Cult/UI/Altar/AltarWindow.xaml.cs

90 lines
2.5 KiB
C#

using Content.Client.TextScreen;
using Robust.Client.AutoGenerated;
using Robust.Client.GameObjects;
using Robust.Client.UserInterface.CustomControls;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Prototypes;
using Robust.Shared.Timing;
namespace Content.Client._White.Cult.UI.Altar;
[GenerateTypedNameReferences]
public partial class AltarWindow : DefaultWindow
{
[Dependency] private readonly IGameTiming _gameTiming = default!;
[Dependency] private readonly SpriteSystem _spriteSystem = default!;
[Dependency] private readonly PrototypeManager _prototypeManager = default!;
public event Action<string>? OnItemSelected;
private TimeSpan? _nextTimeUse = null!;
private List<AltarListingControl> _listingControls = new();
public AltarWindow()
{
RobustXamlLoader.Load(this);
IoCManager.InjectDependencies(this);
}
protected override void FrameUpdate(FrameEventArgs args)
{
base.FrameUpdate(args);
if (_nextTimeUse == null) return;
var remainingTime = _nextTimeUse.Value - _gameTiming.CurTime;
if (remainingTime.TotalSeconds < 0)
{
remainingTime = TimeSpan.Zero;
}
var remainingTimeText = TextScreenSystem.TimeToString(remainingTime);
TimerLabel.SetMessage(remainingTimeText);
}
public void SetListing(List<string> prototypes)
{
foreach (var prototypeId in prototypes)
{
var prototype = _prototypeManager.Index<EntityPrototype>(prototypeId);
if(prototype == null) return;
var prototypeIcon = _spriteSystem.GetPrototypeIcon(prototype).Default;
AddListingControl(prototype);
}
}
public void AddListingControl(EntityPrototype entityPrototype)
{
var icon = _spriteSystem.GetPrototypeIcon(entityPrototype).Default;
var control = new AltarListingControl(entityPrototype, icon, OnItemSelected);
ListingContainer.AddChild(control);
_listingControls.Add(control);
}
public void SetTimer(TimeSpan? timer)
{
_nextTimeUse = timer;
if (timer == null)
{
TimerLabel.SetMessage("Алтарь готов к использованию");
SetListingButtonsState(true);
return;
}
SetListingButtonsState(false);
}
private void SetListingButtonsState(bool enabled)
{
foreach (var listingControl in _listingControls)
{
listingControl.BuyListingButton.Disabled = enabled;
}
}
}