using Robust.Client.GameObjects;
using Robust.Client.Graphics;
using Robust.Client.UserInterface.Controls;
-using Content.Client.Stylesheets;
using Robust.Client.UserInterface.XAML;
using Robust.Shared.Prototypes;
using FancyWindow = Content.Client.UserInterface.Controls.FancyWindow;
+using Content.Shared.IdentityManagement;
+using Robust.Shared.Timing;
namespace Content.Client.VendingMachines.UI
{
public sealed partial class VendingMachineMenu : FancyWindow
{
[Dependency] private readonly IPrototypeManager _prototypeManager = default!;
+ [Dependency] private readonly IEntityManager _entityManager = default!;
+ [Dependency] private readonly IGameTiming _timing = default!;
+
+ private readonly Dictionary<EntProtoId, EntityUid> _dummies = [];
public event Action<ItemList.ItemListSelectedEventArgs>? OnItemSelected;
public event Action<string>? OnSearchChanged;
};
}
+ 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();
+ }
+
/// <summary>
/// Populates the list of available items on the vending machine interface
/// and sets icons based on their prototypes
vendingItem.Text = string.Empty;
vendingItem.Icon = null;
- var itemName = entry.ID;
+ if (!_dummies.TryGetValue(entry.ID, out var dummy))
+ {
+ dummy = _entityManager.Spawn(entry.ID);
+ _dummies.Add(entry.ID, dummy);
+ }
+
+ var itemName = Identity.Name(dummy, _entityManager);
Texture? icon = null;
if (_prototypeManager.TryIndex<EntityPrototype>(entry.ID, out var prototype))
{
- itemName = prototype.Name;
icon = spriteSystem.GetPrototypeIcon(prototype).Default;
}
using Content.Shared.Labels;
using Content.Shared.Labels.Components;
using Content.Shared.Labels.EntitySystems;
-using Content.Shared.NameModifier.EntitySystems;
using JetBrains.Annotations;
using Robust.Shared.Containers;
{
[Dependency] private readonly ItemSlotsSystem _itemSlotsSystem = default!;
[Dependency] private readonly SharedAppearanceSystem _appearance = default!;
- [Dependency] private readonly NameModifierSystem _nameMod = default!;
public const string ContainerName = "paper_label";
{
base.Initialize();
- SubscribeLocalEvent<LabelComponent, MapInitEvent>(OnLabelCompMapInit);
SubscribeLocalEvent<PaperLabelComponent, ComponentInit>(OnComponentInit);
SubscribeLocalEvent<PaperLabelComponent, ComponentRemove>(OnComponentRemove);
SubscribeLocalEvent<PaperLabelComponent, EntInsertedIntoContainerMessage>(OnContainerModified);
SubscribeLocalEvent<PaperLabelComponent, ExaminedEvent>(OnExamined);
}
- private void OnLabelCompMapInit(EntityUid uid, LabelComponent component, MapInitEvent args)
- {
- if (!string.IsNullOrEmpty(component.CurrentLabel))
- {
- component.CurrentLabel = Loc.GetString(component.CurrentLabel);
- Dirty(uid, component);
- }
-
- _nameMod.RefreshNameModifiers(uid);
- }
-
/// <summary>
/// Apply or remove a label on an entity.
/// </summary>
label = EnsureComp<LabelComponent>(uid);
label.CurrentLabel = text;
- _nameMod.RefreshNameModifiers(uid);
+ NameMod.RefreshNameModifiers(uid);
Dirty(uid, label);
}
public abstract partial class SharedLabelSystem : EntitySystem
{
+ [Dependency] protected readonly NameModifierSystem NameMod = default!;
public override void Initialize()
{
base.Initialize();
+ SubscribeLocalEvent<LabelComponent, MapInitEvent>(OnLabelCompMapInit);
SubscribeLocalEvent<LabelComponent, ExaminedEvent>(OnExamine);
SubscribeLocalEvent<LabelComponent, RefreshNameModifiersEvent>(OnRefreshNameModifiers);
}
+ private void OnLabelCompMapInit(EntityUid uid, LabelComponent component, MapInitEvent args)
+ {
+ if (!string.IsNullOrEmpty(component.CurrentLabel))
+ {
+ component.CurrentLabel = Loc.GetString(component.CurrentLabel);
+ Dirty(uid, component);
+ }
+
+ NameMod.RefreshNameModifiers(uid);
+ }
+
public virtual void Label(EntityUid uid, string? text, MetaDataComponent? metadata = null, LabelComponent? label = null){}
private void OnExamine(EntityUid uid, LabelComponent? label, ExaminedEvent args)