uplink and store freshening (#26444)
* uplink and store freshening * more * im gonna POOOOOOGGGGGGG * we love it
This commit is contained in:
@@ -1,25 +1,91 @@
|
||||
using Content.Client.GameTicking.Managers;
|
||||
using Content.Shared.Store;
|
||||
using Robust.Client.AutoGenerated;
|
||||
using Robust.Client.Graphics;
|
||||
using Robust.Client.UserInterface;
|
||||
using Robust.Client.UserInterface.XAML;
|
||||
using Robust.Shared.Graphics;
|
||||
using Robust.Shared.Prototypes;
|
||||
using Robust.Shared.Timing;
|
||||
|
||||
namespace Content.Client.Store.Ui;
|
||||
|
||||
[GenerateTypedNameReferences]
|
||||
public sealed partial class StoreListingControl : Control
|
||||
{
|
||||
public StoreListingControl(string itemName, string itemDescription,
|
||||
string price, bool canBuy, Texture? texture = null)
|
||||
[Dependency] private readonly IPrototypeManager _prototype = default!;
|
||||
[Dependency] private readonly IEntityManager _entity = default!;
|
||||
[Dependency] private readonly IGameTiming _timing = default!;
|
||||
private readonly ClientGameTicker _ticker;
|
||||
|
||||
private readonly ListingData _data;
|
||||
|
||||
private readonly bool _hasBalance;
|
||||
private readonly string _price;
|
||||
public StoreListingControl(ListingData data, string price, bool hasBalance, Texture? texture = null)
|
||||
{
|
||||
IoCManager.InjectDependencies(this);
|
||||
RobustXamlLoader.Load(this);
|
||||
|
||||
StoreItemName.Text = itemName;
|
||||
StoreItemDescription.SetMessage(itemDescription);
|
||||
_ticker = _entity.System<ClientGameTicker>();
|
||||
|
||||
StoreItemBuyButton.Text = price;
|
||||
StoreItemBuyButton.Disabled = !canBuy;
|
||||
_data = data;
|
||||
_hasBalance = hasBalance;
|
||||
_price = price;
|
||||
|
||||
StoreItemName.Text = ListingLocalisationHelpers.GetLocalisedNameOrEntityName(_data, _prototype);
|
||||
StoreItemDescription.SetMessage(ListingLocalisationHelpers.GetLocalisedDescriptionOrEntityDescription(_data, _prototype));
|
||||
|
||||
UpdateBuyButtonText();
|
||||
StoreItemBuyButton.Disabled = !CanBuy();
|
||||
|
||||
StoreItemTexture.Texture = texture;
|
||||
}
|
||||
|
||||
private bool CanBuy()
|
||||
{
|
||||
if (!_hasBalance)
|
||||
return false;
|
||||
|
||||
var stationTime = _timing.CurTime.Subtract(_ticker.RoundStartTimeSpan);
|
||||
if (_data.RestockTime > stationTime)
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private void UpdateBuyButtonText()
|
||||
{
|
||||
var stationTime = _timing.CurTime.Subtract(_ticker.RoundStartTimeSpan);
|
||||
if (_data.RestockTime > stationTime)
|
||||
{
|
||||
var timeLeftToBuy = stationTime - _data.RestockTime;
|
||||
StoreItemBuyButton.Text = timeLeftToBuy.Duration().ToString(@"mm\:ss");
|
||||
}
|
||||
else
|
||||
{
|
||||
StoreItemBuyButton.Text = _price;
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateName()
|
||||
{
|
||||
var name = ListingLocalisationHelpers.GetLocalisedNameOrEntityName(_data, _prototype);
|
||||
|
||||
var stationTime = _timing.CurTime.Subtract(_ticker.RoundStartTimeSpan);
|
||||
if (_data.RestockTime > stationTime)
|
||||
{
|
||||
name += Loc.GetString("store-ui-button-out-of-stock");
|
||||
}
|
||||
|
||||
StoreItemName.Text = name;
|
||||
}
|
||||
|
||||
protected override void FrameUpdate(FrameEventArgs args)
|
||||
{
|
||||
base.FrameUpdate(args);
|
||||
|
||||
UpdateBuyButtonText();
|
||||
UpdateName();
|
||||
StoreItemBuyButton.Disabled = !CanBuy();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user