From fa9169e3467f51365ef83084ed43ecdfd1fa8db1 Mon Sep 17 00:00:00 2001 From: FL-OZ <58238103+FL-OZ@users.noreply.github.com> Date: Fri, 5 Jun 2020 11:44:25 -0500 Subject: [PATCH] pda improvements (#1072) Co-authored-by: FL-OZ --- .../Components/PDA/PDABoundUserInterface.cs | 151 +++++++++++++++--- .../Components/PDA/PDAComponent.cs | 21 +++ .../Components/PDA/PDAComponent.cs | 14 +- Content.Server/PDA/PDAUplinkManager.cs | 10 +- .../Components/PDA/SharedPDAComponent.cs | 14 +- .../Components/PDA/UplinkCategory.cs | 3 +- .../PDA/UplinkStoreListingPrototype.cs | 3 - Resources/Audio/effects/error.ogg | Bin 0 -> 14629 bytes Resources/Audio/effects/kaching.ogg | Bin 0 -> 22231 bytes Resources/Prototypes/PDA/uplink_catalog.yml | 34 ++-- 10 files changed, 188 insertions(+), 62 deletions(-) create mode 100644 Resources/Audio/effects/error.ogg create mode 100644 Resources/Audio/effects/kaching.ogg diff --git a/Content.Client/GameObjects/Components/PDA/PDABoundUserInterface.cs b/Content.Client/GameObjects/Components/PDA/PDABoundUserInterface.cs index 6b30c82036..062fd7feea 100644 --- a/Content.Client/GameObjects/Components/PDA/PDABoundUserInterface.cs +++ b/Content.Client/GameObjects/Components/PDA/PDABoundUserInterface.cs @@ -1,8 +1,10 @@ using System; +using Content.Client.GameObjects.EntitySystems; using Content.Client.Utility; using Content.Shared.GameObjects.Components.PDA; using Robust.Client.GameObjects.Components.UserInterface; using Robust.Client.Graphics.Drawing; +using Robust.Client.Interfaces.UserInterface; using Robust.Client.UserInterface.Controls; using Robust.Client.UserInterface.CustomControls; using Robust.Shared.GameObjects; @@ -19,13 +21,14 @@ namespace Content.Client.GameObjects.Components.PDA { #pragma warning disable 649 [Dependency] private readonly IPrototypeManager _prototypeManager; + [Dependency] private readonly IUserInterfaceManager _userInterfaceManager; #pragma warning restore 649 private PDAMenu _menu; - private ClientUserInterfaceComponent Owner; + private PDAMenuPopup failPopup; public PDABoundUserInterface(ClientUserInterfaceComponent owner, object uiKey) : base(owner, uiKey) { - Owner = owner; + } protected override void Open() @@ -56,6 +59,17 @@ namespace Content.Client.GameObjects.Components.PDA _menu.OnListingButtonPressed += (args, listing) => { + if (_menu.CurrentLoggedInAccount.DataBalance < listing.Price) + { + failPopup = new PDAMenuPopup(Loc.GetString("Insufficient funds!")); + _userInterfaceManager.ModalRoot.AddChild(failPopup); + failPopup.Open(UIBox2.FromDimensions(_menu.Position.X + 150, _menu.Position.Y + 60, 156, 24)); + _menu.OnClose += () => + { + failPopup.Dispose(); + }; + } + SendMessage(new PDAUplinkBuyListingMessage(listing)); }; @@ -67,13 +81,12 @@ namespace Content.Client.GameObjects.Components.PDA }; } - protected override void UpdateState(BoundUserInterfaceState state) { base.UpdateState(state); DebugTools.Assert((state is PDAUBoundUserInterfaceState)); - var cstate = (PDAUBoundUserInterfaceState) state; + var cstate = (PDAUBoundUserInterfaceState)state; switch (state) { case PDAUpdateState msg: @@ -108,18 +121,96 @@ namespace Content.Client.GameObjects.Components.PDA _menu.AddListingGui(item); } } + + var balance = _menu.CurrentLoggedInAccount.DataBalance; + var weightedColor = GetWeightedColorString(balance); + _menu.BalanceInfo.SetMarkup(Loc.GetString("TC Balance: [color={0}]{1}[/color]", weightedColor, balance)); + _menu.MasterTabContainer.SetTabVisible(1, msg.Account != null); break; } - } } + protected override void Dispose(bool disposing) { base.Dispose(disposing); _menu?.Dispose(); } + /// + /// This is shitcode. It is, however, "PJB-approved shitcode". + /// + /// + /// + public static Color GetWeightedColor(int x) + { + var weightedColor = Color.Gray; + if (x <= 0) + { + return weightedColor; + } + if (x <= 5) + { + weightedColor = Color.Green; + } + else if (x > 5 && x < 10) + { + weightedColor = Color.Yellow; + } + else if (x > 10 && x <= 20) + { + weightedColor = Color.Orange; + } + else if (x > 20 && x <= 50) + { + weightedColor = Color.Purple; + } + + return weightedColor; + } + + public static string GetWeightedColorString(int x) + { + var weightedColor = "gray"; + if (x <= 0) + { + return weightedColor; + } + + if (x <= 5) + { + weightedColor = "green"; + } + else if (x > 5 && x < 10) + { + weightedColor = "yellow"; + } + else if (x > 10 && x <= 20) + { + weightedColor = "yellow"; + } + else if (x > 20 && x <= 50) + { + weightedColor = "purple"; + } + return weightedColor; + } + + public sealed class PDAMenuPopup : Popup + { + public PDAMenuPopup(string text) + { + var label = new RichTextLabel(); + label.SetMessage(text); + AddChild(new PanelContainer + { + StyleClasses = { ExamineSystem.StyleClassEntityTooltip }, + Children = { label } + }); + } + } + private class PDAMenu : SS14Window { protected override Vector2? CustomSize => (512, 256); @@ -144,6 +235,7 @@ namespace Content.Client.GameObjects.Components.PDA public VBoxContainer UplinkListingsContainer; public VBoxContainer CategoryListContainer; + public RichTextLabel BalanceInfo; public event Action OnListingButtonPressed; public event Action OnCategoryButtonPressed; @@ -241,16 +333,16 @@ namespace Content.Client.GameObjects.Components.PDA CategoryListContainer = new VBoxContainer { }; - var uplinkStoreHeader = new Label + + BalanceInfo = new RichTextLabel { - Align = Label.AlignMode.Center, - Text = Loc.GetString("Uplink Listings"), + SizeFlagsHorizontal = SizeFlags.ShrinkCenter, }; //Red background container. var masterPanelContainer = new PanelContainer { - PanelOverride = new StyleBoxFlat {BackgroundColor = Color.DarkRed.WithAlpha(0.6f)}, + PanelOverride = new StyleBoxFlat { BackgroundColor = Color.Black }, SizeFlagsVertical = SizeFlags.FillExpand }; @@ -272,7 +364,7 @@ namespace Content.Client.GameObjects.Components.PDA //Add the category list to the left side. The store items to center. var categoryListContainerBackground = new PanelContainer { - PanelOverride = new StyleBoxFlat {BackgroundColor = Color.Black.WithAlpha(0.4f)}, + PanelOverride = new StyleBoxFlat { BackgroundColor = Color.Gray.WithAlpha(0.02f) }, SizeFlagsVertical = SizeFlags.FillExpand, Children = { @@ -300,7 +392,7 @@ namespace Content.Client.GameObjects.Components.PDA Children = { - uplinkStoreHeader, + BalanceInfo, masterPanelContainer } }; @@ -334,7 +426,7 @@ namespace Content.Client.GameObjects.Components.PDA private void PopulateUplinkCategoryButtons() { - foreach (UplinkCategory cat in Enum.GetValues(typeof (UplinkCategory))) + foreach (UplinkCategory cat in Enum.GetValues(typeof(UplinkCategory))) { var catButton = new PDAUplinkCategoryButton @@ -343,7 +435,9 @@ namespace Content.Client.GameObjects.Components.PDA ButtonCategory = cat }; - + //It'd be neat if it could play a cool tech ping sound when you switch categories, + //but right now there doesn't seem to be an easy way to do client-side audio without still having to round trip to the server and + //send to a specific client INetChannel. catButton.OnPressed += args => OnCategoryButtonPressed?.Invoke(args, catButton.ButtonCategory); CategoryListContainer.AddChild(catButton); @@ -357,34 +451,41 @@ namespace Content.Client.GameObjects.Components.PDA { return; } - + var weightedColor = GetWeightedColor(listing.Price); var itemLabel = new Label { Text = listing.ListingName == string.Empty ? prototype.Name : listing.ListingName, ToolTip = listing.Description == string.Empty ? prototype.Description : listing.Description, SizeFlagsHorizontal = SizeFlags.FillExpand, + Modulate = _loggedInUplinkAccount.DataBalance >= listing.Price + ? Color.White + : Color.Gray.WithAlpha(0.30f) }; var priceLabel = new Label { Text = $"{listing.Price} TC", - Align = Label.AlignMode.Right, + SizeFlagsHorizontal = SizeFlags.ShrinkEnd, + Modulate = _loggedInUplinkAccount.DataBalance >= listing.Price + ? weightedColor + : Color.Gray.WithAlpha(0.30f) }; + //Padding for the price lable. + var pricePadding = new HBoxContainer + { + CustomMinimumSize = (32, 1), + SizeFlagsHorizontal = SizeFlags.Fill, + }; - //Can the account afford this item? If so use the item's color, else gray it out. - var itemColor = _loggedInUplinkAccount.DataBalance >= listing.Price - ? listing.DisplayColor - : Color.Gray.WithAlpha(0.25f); - - //Contains the name of the item and its price. Used for spacing price and name. + //Contains the name of the item and its price. Used for spacing item name and price. var listingButtonHbox = new HBoxContainer { - Modulate = itemColor, Children = { itemLabel, - priceLabel + priceLabel, + pricePadding } }; @@ -406,17 +507,15 @@ namespace Content.Client.GameObjects.Components.PDA } }; pdaUplinkListingButton.OnPressed += args - => OnListingButtonPressed?.Invoke(args,pdaUplinkListingButton.ButtonListing); + => OnListingButtonPressed?.Invoke(args, pdaUplinkListingButton.ButtonListing); UplinkListingsContainer.AddChild(pdaUplinkListingButton); } - public void ClearListings() { UplinkListingsContainer.Children.Clear(); } - private sealed class PDAUplinkItemButton : ContainerButton { public UplinkListingData ButtonListing; diff --git a/Content.Client/GameObjects/Components/PDA/PDAComponent.cs b/Content.Client/GameObjects/Components/PDA/PDAComponent.cs index 8118d7ee33..bdeb4f7ffb 100644 --- a/Content.Client/GameObjects/Components/PDA/PDAComponent.cs +++ b/Content.Client/GameObjects/Components/PDA/PDAComponent.cs @@ -1,11 +1,32 @@ using Content.Shared.GameObjects.Components.PDA; +using Robust.Client.GameObjects.EntitySystems; +using Robust.Shared.Audio; using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; +using Robust.Shared.Interfaces.Network; +using Robust.Shared.Players; namespace Content.Client.GameObjects.Components.PDA { [RegisterComponent] public class PDAComponent : SharedPDAComponent { + public override void HandleNetworkMessage(ComponentMessage message, INetChannel netChannel, ICommonSession session = null) + { + base.HandleNetworkMessage(message, netChannel, session); + switch(message) + { + case PDAUplinkBuySuccessMessage _ : + EntitySystem.Get().Play("/Audio/effects/kaching.ogg", Owner, AudioParams.Default.WithVolume(-2f)); + break; + + case PDAUplinkInsufficientFundsMessage _ : + EntitySystem.Get().Play("/Audio/effects/error.ogg", Owner, AudioParams.Default); + break; + + } + } + } } diff --git a/Content.Server/GameObjects/Components/PDA/PDAComponent.cs b/Content.Server/GameObjects/Components/PDA/PDAComponent.cs index 52f9b4f670..9f88041a01 100644 --- a/Content.Server/GameObjects/Components/PDA/PDAComponent.cs +++ b/Content.Server/GameObjects/Components/PDA/PDAComponent.cs @@ -11,8 +11,10 @@ using Content.Shared.GameObjects.Components.PDA; using Robust.Server.GameObjects; using Robust.Server.GameObjects.Components.Container; using Robust.Server.GameObjects.Components.UserInterface; +using Robust.Server.GameObjects.EntitySystems; using Robust.Server.Interfaces.GameObjects; using Robust.Shared.GameObjects; +using Robust.Shared.GameObjects.Systems; using Robust.Shared.Interfaces.GameObjects; using Robust.Shared.IoC; using Robust.Shared.Localization; @@ -69,7 +71,8 @@ namespace Content.Server.GameObjects.Components.PDA _interface.OnReceiveMessage += UserInterfaceOnReceiveMessage; var idCard = _entityManager.SpawnEntity(_startingIdCard, Owner.Transform.GridPosition); var idCardComponent = idCard.GetComponent(); - InsertIdCard(idCardComponent); + _idSlot.Insert(idCardComponent.Owner); + ContainedID = idCardComponent; UpdatePDAAppearance(); } @@ -98,9 +101,11 @@ namespace Content.Server.GameObjects.Components.PDA { if (!_uplinkManager.TryPurchaseItem(_syndicateUplinkAccount, buyMsg.ListingToBuy)) { - //TODO: Send a message that tells the buyer they are too poor or something. + SendNetworkMessage(new PDAUplinkInsufficientFundsMessage(), message.Session.ConnectedClient); + break; } + SendNetworkMessage(new PDAUplinkBuySuccessMessage(), message.Session.ConnectedClient); break; } } @@ -186,12 +191,14 @@ namespace Content.Server.GameObjects.Components.PDA OwnerMob = mob; UpdatePDAUserInterface(); + } private void InsertIdCard(IdCardComponent card) { _idSlot.Insert(card.Owner); ContainedID = card; + EntitySystem.Get().Play("/Audio/Guns/MagIn/batrifle_magin.ogg", Owner); } /// @@ -215,6 +222,7 @@ namespace Content.Server.GameObjects.Components.PDA { _lightOn = !_lightOn; _pdaLight.Enabled = _lightOn; + EntitySystem.Get().Play("/Audio/items/flashlight_toggle.ogg", Owner); UpdatePDAUserInterface(); } @@ -232,6 +240,8 @@ namespace Content.Server.GameObjects.Components.PDA var cardItemComponent = cardEntity.GetComponent(); hands.PutInHandOrDrop(cardItemComponent); ContainedID = null; + + EntitySystem.Get().Play("/Audio/machines/machine_switch.ogg", Owner); UpdatePDAUserInterface(); } diff --git a/Content.Server/PDA/PDAUplinkManager.cs b/Content.Server/PDA/PDAUplinkManager.cs index 52c503ebea..7e199ce153 100644 --- a/Content.Server/PDA/PDAUplinkManager.cs +++ b/Content.Server/PDA/PDAUplinkManager.cs @@ -1,6 +1,4 @@ -using System; using System.Collections.Generic; -using System.Diagnostics; using System.Linq; using Content.Server.GameObjects; using Content.Server.GameObjects.Components.Mobs; @@ -31,7 +29,7 @@ namespace Content.Server.PDA foreach (var item in _prototypeManager.EnumeratePrototypes()) { var newListing = new UplinkListingData(item.ListingName, item.ItemId, item.Price, item.Category, - item.Description, item.DisplayColor); + item.Description); RegisterUplinkListing(newListing); } @@ -94,11 +92,15 @@ namespace Content.Server.PDA return false; } + if (!ChangeBalance(acc, -listing.Price)) + { + return false; + } var player = _entityManager.GetEntity(acc.AccountHolder); var hands = player.GetComponent(); hands.PutInHandOrDrop(_entityManager.SpawnEntity(listing.ItemId, player.Transform.GridPosition).GetComponent()); - return ChangeBalance(acc, -listing.Price); + return true; } diff --git a/Content.Shared/GameObjects/Components/PDA/SharedPDAComponent.cs b/Content.Shared/GameObjects/Components/PDA/SharedPDAComponent.cs index 16515d3f9d..567f7f8b2c 100644 --- a/Content.Shared/GameObjects/Components/PDA/SharedPDAComponent.cs +++ b/Content.Shared/GameObjects/Components/PDA/SharedPDAComponent.cs @@ -80,6 +80,16 @@ namespace Content.Shared.GameObjects.Components.PDA } } + [Serializable, NetSerializable] + public sealed class PDAUplinkBuySuccessMessage : ComponentMessage + { + } + + [Serializable, NetSerializable] + public sealed class PDAUplinkInsufficientFundsMessage : ComponentMessage + { + } + [Serializable, NetSerializable] public sealed class PDARequestUpdateInterfaceMessage : BoundUserInterfaceMessage { @@ -156,18 +166,16 @@ namespace Content.Shared.GameObjects.Components.PDA public UplinkCategory Category; public string Description; public string ListingName; - public Color DisplayColor; public UplinkListingData(string listingName,string itemId, int price, UplinkCategory category, - string description, Color displayColor) : base(ContentNetIDs.PDA) + string description) : base(ContentNetIDs.PDA) { ListingName = listingName; Price = price; Category = category; Description = description; ItemId = itemId; - DisplayColor = displayColor; } public bool Equals(UplinkListingData other) diff --git a/Content.Shared/GameObjects/Components/PDA/UplinkCategory.cs b/Content.Shared/GameObjects/Components/PDA/UplinkCategory.cs index 9dca94d517..13f8ad5245 100644 --- a/Content.Shared/GameObjects/Components/PDA/UplinkCategory.cs +++ b/Content.Shared/GameObjects/Components/PDA/UplinkCategory.cs @@ -2,7 +2,8 @@ namespace Content.Shared.GameObjects.Components.PDA { public enum UplinkCategory { - Weapon, + Weapons, + Ammo, Utility, } } diff --git a/Content.Shared/Prototypes/PDA/UplinkStoreListingPrototype.cs b/Content.Shared/Prototypes/PDA/UplinkStoreListingPrototype.cs index 50f7097127..a4af3f9540 100644 --- a/Content.Shared/Prototypes/PDA/UplinkStoreListingPrototype.cs +++ b/Content.Shared/Prototypes/PDA/UplinkStoreListingPrototype.cs @@ -16,7 +16,6 @@ namespace Content.Shared.Prototypes.PDA private UplinkCategory _category; private string _desc; private string _name; - private Color _displayColor; public string ID => _id; @@ -25,7 +24,6 @@ namespace Content.Shared.Prototypes.PDA public UplinkCategory Category => _category; public string Description => _desc; public string ListingName => _name; - public Color DisplayColor => _displayColor; public void LoadFrom(YamlMappingNode mapping) { var serializer = YamlObjectSerializer.NewReader(mapping); @@ -35,7 +33,6 @@ namespace Content.Shared.Prototypes.PDA serializer.DataField(ref _category, "category", UplinkCategory.Utility); serializer.DataField(ref _desc, "description", string.Empty); serializer.DataField(ref _name, "listingName", string.Empty); - serializer.DataField(ref _displayColor, "displayColor", Color.White); } } diff --git a/Resources/Audio/effects/error.ogg b/Resources/Audio/effects/error.ogg new file mode 100644 index 0000000000000000000000000000000000000000..4d7188e251eb87975010623ff832ccc3f5d4d781 GIT binary patch literal 14629 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 literal 0 HcmV?d00001 diff --git a/Resources/Audio/effects/kaching.ogg b/Resources/Audio/effects/kaching.ogg new file mode 100644 index 0000000000000000000000000000000000000000..ea642a56a9b9770c64856fdc8e6629afc21a970d GIT binary patch literal 22231 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 Q1W