* Moved pen slot to separate component * Moved it all to more generic item slot class * Add sounds * Item slots now supports many slots * Some clean-up * Refactored slots a bit * Moving ID card out * Moving pda to system * Moving PDA owner to ECS * Moved PDA flashlight to separate component * Toggle lights work through events * Fixing UI * Moving uplink to separate component * Continue moving uplink to separate component * More cleaning * Removing pda shared * Nuked shared pda component * Fixed flashlight * Pen slot now showed in UI * Light toggle now shows correctly in UI * Small refactoring of item slots * Added contained entity * Fixed tests * Finished with PDA * Moving PDA uplink to separate window * Adding-removing uplink should show new button * Working on a better debug * Debug command to add uplink * Uplink send state to UI * Almost working UI * Uplink correcty updates when you buy-sell items * Ups * Moved localization to separate file * Minor fixes * Removed item slots methods events * Removed PDA owner name * Removed one uplink event * Deleted all uplink events * Removed flashlight events * Update Content.Shared/Traitor/Uplink/UplinkVisuals.cs Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> * Update Content.Server/Containers/ItemSlot/ItemSlotsSystem.cs Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> * Update Content.Server/Containers/ItemSlot/ItemSlotsSystem.cs Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> * Update Content.Server/GameTicking/Presets/PresetTraitorDeathMatch.cs Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> * Item slots system review * Flashlight review * PDA to XAML * Move UplinkMenu to seperate class, fix WeightedColors methods * Move UI to XAML * Moved events to entity id * Address review * Removed uplink extensions * Minor fix * Moved item slots to shared * My bad Robust... * Fixed pda sound * Fixed pda tests * Fixed pda test again Co-authored-by: Alexander Evgrashin <evgrashin.adl@gmail.com> Co-authored-by: metalgearsloth <31366439+metalgearsloth@users.noreply.github.com> Co-authored-by: Visne <vincefvanwijk@gmail.com>
113 lines
3.8 KiB
C#
113 lines
3.8 KiB
C#
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)
|
|
{
|
|
}
|
|
|
|
protected override void Open()
|
|
{
|
|
_menu = new UplinkMenu(_prototypeManager);
|
|
_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));
|
|
};
|
|
|
|
_menu.OnCategoryButtonPressed += (_, category) =>
|
|
{
|
|
_menu.CurrentFilterCategory = category;
|
|
SendMessage(new UplinkRequestUpdateInterfaceMessage());
|
|
|
|
};
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
private sealed class UplinkMenuPopup : Popup
|
|
{
|
|
public UplinkMenuPopup(string text)
|
|
{
|
|
var label = new RichTextLabel();
|
|
label.SetMessage(text);
|
|
AddChild(new PanelContainer
|
|
{
|
|
StyleClasses = { ExamineSystem.StyleClassEntityTooltip },
|
|
Children = { label }
|
|
});
|
|
}
|
|
}
|
|
}
|
|
}
|