using Content.Client.Items.UI; using Content.Client.Message; using Content.Client.Stylesheets; using Content.Shared.Charges.Components; using Content.Shared.Charges.Systems; using Robust.Client.UserInterface.Controls; using Robust.Shared.IoC; namespace Content.Client.Charges.UI; /// /// Displays limited charges information for . /// /// public sealed partial class ChargeStatusControl : PollingItemStatusControl { [Dependency] private IEntityManager _entityManager = default!; private readonly Entity _parent; private readonly SharedChargesSystem _chargesSystem; private readonly RichTextLabel _label; public ChargeStatusControl(Entity parent) { IoCManager.InjectDependencies(this); _parent = parent; _chargesSystem = _entityManager.System(); _label = new RichTextLabel { StyleClasses = { StyleClass.ItemStatus } }; AddChild(_label); } protected override Data PollData() { var charges = _parent.Comp; var currentCharges = _chargesSystem.GetCurrentCharges((_parent.Owner, charges, null)); var maxCharges = charges.MaxCharges; TimeSpan? nextRecharge = null; if (_entityManager.TryGetComponent(_parent.Owner, out var autoRecharge)) { var nextRechargeTime = _chargesSystem.GetNextRechargeTime((_parent.Owner, charges, autoRecharge)); if (nextRechargeTime > TimeSpan.Zero) nextRecharge = nextRechargeTime; } return new Data(currentCharges, maxCharges, nextRecharge); } protected override void Update(in Data data) { var markup = Loc.GetString("charge-status-count", ("current", data.CurrentCharges), ("max", data.MaxCharges)); if (data.NextRecharge.HasValue) { var seconds = (int)data.NextRecharge.Value.TotalSeconds; markup += "\n" + Loc.GetString("charge-status-recharge", ("seconds", seconds)); } _label.SetMarkup(markup); } public readonly record struct Data(int CurrentCharges, int MaxCharges, TimeSpan? NextRecharge); }