diff --git a/Content.Client/Traitor/Uplink/UplinkBoundUserInterface.cs b/Content.Client/Traitor/Uplink/UplinkBoundUserInterface.cs index 171fe488fe..f14b5ab842 100644 --- a/Content.Client/Traitor/Uplink/UplinkBoundUserInterface.cs +++ b/Content.Client/Traitor/Uplink/UplinkBoundUserInterface.cs @@ -1,26 +1,14 @@ -using Content.Client.Examine; -using Content.Client.Message; using Content.Shared.Traitor.Uplink; using JetBrains.Annotations; using Robust.Client.GameObjects; -using Robust.Client.UserInterface; -using Robust.Client.UserInterface.Controls; using Robust.Shared.GameObjects; -using Robust.Shared.IoC; -using Robust.Shared.Localization; -using Robust.Shared.Maths; -using Robust.Shared.Prototypes; namespace Content.Client.Traitor.Uplink { [UsedImplicitly] public class UplinkBoundUserInterface : BoundUserInterface { - [Dependency] private readonly IPrototypeManager _prototypeManager = default!; - [Dependency] private readonly IUserInterfaceManager _userInterfaceManager = default!; - private UplinkMenu? _menu; - private UplinkMenuPopup? _failPopup; public UplinkBoundUserInterface(ClientUserInterfaceComponent owner, object uiKey) : base(owner, uiKey) { @@ -28,23 +16,12 @@ namespace Content.Client.Traitor.Uplink protected override void Open() { - _menu = new UplinkMenu(_prototypeManager); + _menu = new UplinkMenu(); _menu.OpenCentered(); _menu.OnClose += Close; _menu.OnListingButtonPressed += (_, listing) => { - if (_menu.CurrentLoggedInAccount?.DataBalance < listing.Price) - { - _failPopup = new UplinkMenuPopup(Loc.GetString("uplink-bound-user-interface-insufficient-funds-popup")); - _userInterfaceManager.ModalRoot.AddChild(_failPopup); - _failPopup.Open(UIBox2.FromDimensions(_menu.Position.X + 150, _menu.Position.Y + 60, 156, 24)); - _menu.OnClose += () => - { - _failPopup.Dispose(); - }; - } - SendMessage(new UplinkBuyListingMessage(listing.ItemId)); }; @@ -54,59 +31,36 @@ namespace Content.Client.Traitor.Uplink SendMessage(new UplinkRequestUpdateInterfaceMessage()); }; - } + _menu.OnWithdrawAttempt += (tc) => + { + SendMessage(new UplinkTryWithdrawTC(tc)); + }; + } protected override void UpdateState(BoundUserInterfaceState state) { base.UpdateState(state); if (_menu == null) - { return; - } switch (state) { case UplinkUpdateState msg: - { - _menu.CurrentLoggedInAccount = msg.Account; - var balance = msg.Account.DataBalance; - string weightedColor = balance switch - { - <= 0 => "gray", - <= 5 => "green", - <= 20 => "yellow", - <= 50 => "purple", - _ => "gray" - }; - _menu.BalanceInfo.SetMarkup(Loc.GetString("uplink-bound-user-interface-tc-balance-popup", - ("weightedColor", weightedColor), - ("balance", balance))); - - _menu.ClearListings(); - foreach (var item in - msg.Listings) //Should probably chunk these out instead. to-do if this clogs the internet tubes. - { - _menu.AddListingGui(item); - } - + _menu.UpdateAccount(msg.Account); + _menu.UpdateListing(msg.Listings); break; - } } } - private sealed class UplinkMenuPopup : Popup + protected override void Dispose(bool disposing) { - public UplinkMenuPopup(string text) - { - var label = new RichTextLabel(); - label.SetMessage(text); - AddChild(new PanelContainer - { - StyleClasses = { ExamineSystem.StyleClassEntityTooltip }, - Children = { label } - }); - } + base.Dispose(disposing); + if (!disposing) + return; + + _menu?.Close(); + _menu?.Dispose(); } } } diff --git a/Content.Client/Traitor/Uplink/UplinkListingControl.xaml b/Content.Client/Traitor/Uplink/UplinkListingControl.xaml index 544edc191d..d6d1283ced 100644 --- a/Content.Client/Traitor/Uplink/UplinkListingControl.xaml +++ b/Content.Client/Traitor/Uplink/UplinkListingControl.xaml @@ -10,6 +10,13 @@ MinWidth="64"/> - + + + + diff --git a/Content.Client/Traitor/Uplink/UplinkListingControl.xaml.cs b/Content.Client/Traitor/Uplink/UplinkListingControl.xaml.cs index 8080f42fd8..c3f6c2f925 100644 --- a/Content.Client/Traitor/Uplink/UplinkListingControl.xaml.cs +++ b/Content.Client/Traitor/Uplink/UplinkListingControl.xaml.cs @@ -1,4 +1,5 @@ using Robust.Client.AutoGenerated; +using Robust.Client.Graphics; using Robust.Client.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.XAML; @@ -9,7 +10,9 @@ namespace Content.Client.Traitor.Uplink [GenerateTypedNameReferences] public partial class UplinkListingControl : Control { - public UplinkListingControl(string itemName, string itemDescription, int itemPrice, bool canBuy) + + public UplinkListingControl(string itemName, string itemDescription, + int itemPrice, bool canBuy, Texture? texture = null) { RobustXamlLoader.Load(this); @@ -18,6 +21,8 @@ namespace Content.Client.Traitor.Uplink UplinkItemBuyButton.Text = $"{itemPrice} TC"; UplinkItemBuyButton.Disabled = !canBuy; + + UplinkItemTexture.Texture = texture; } } } diff --git a/Content.Client/Traitor/Uplink/UplinkMenu.xaml b/Content.Client/Traitor/Uplink/UplinkMenu.xaml index dae85f2e81..0f67b73fbb 100644 --- a/Content.Client/Traitor/Uplink/UplinkMenu.xaml +++ b/Content.Client/Traitor/Uplink/UplinkMenu.xaml @@ -12,6 +12,10 @@ Access="Public" HorizontalExpand="True" HorizontalAlignment="Left" /> +