using FancyWindow = Content.Client.UserInterface.Controls.FancyWindow;
using Robust.Client.UserInterface;
using Content.Client.UserInterface.Controls;
+using Content.Shared.IdentityManagement;
using Robust.Client.Graphics;
namespace Content.Client.VendingMachines.UI
public sealed partial class VendingMachineMenu : FancyWindow
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
+ [Dependency] private readonly IEntityManager _entityManager = default!;
+
+ private readonly Dictionary<EntProtoId, EntityUid> _dummies = [];
public event Action<GUIBoundKeyEventArgs, ListData>? OnItemSelected;
VendingContents.ItemKeyBindDown += (args, data) => OnItemSelected?.Invoke(args, data);
}
+ protected override void Dispose(bool disposing)
+ {
+ base.Dispose(disposing);
+
+ // Don't clean up dummies during disposal or we'll just have to spawn them again
+ if (!disposing)
+ return;
+
+ // Delete any dummy items we spawned
+ foreach (var entity in _dummies.Values)
+ {
+ _entityManager.QueueDeleteEntity(entity);
+ }
+ _dummies.Clear();
+ }
+
private bool DataFilterCondition(string filter, ListData data)
{
if (data is not VendorItemsListData { ItemText: var text })
if (!_prototypeManager.TryIndex(entry.ID, out var prototype))
continue;
- var itemText = $"{prototype.Name} [{entry.Amount}]";
+ if (!_dummies.TryGetValue(entry.ID, out var dummy))
+ {
+ dummy = _entityManager.Spawn(entry.ID);
+ _dummies.Add(entry.ID, dummy);
+ }
+
+ var itemName = Identity.Name(dummy, _entityManager);
+ var itemText = $"{itemName} [{entry.Amount}]";
if (itemText.Length > longestEntry.Length)
longestEntry = itemText;