using Content.Client.UserInterface.Controls; using Content.Client.VendingMachines.UI; using Content.Shared.VendingMachines; using Robust.Client.UserInterface; using Robust.Shared.Input; using System.Linq; namespace Content.Client.VendingMachines { public sealed class VendingMachineBoundUserInterface : BoundUserInterface { [ViewVariables] private VendingMachineMenu? _menu; [ViewVariables] private List _cachedInventory = new(); public VendingMachineBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey) { } protected override void Open() { base.Open(); _menu = this.CreateWindow(); _menu.OpenCenteredLeft(); _menu.Title = EntMan.GetComponent(Owner).EntityName; _menu.OnItemSelected += OnItemSelected; Refresh(); } public void Refresh() { var system = EntMan.System(); _cachedInventory = system.GetAllInventory(Owner); _menu?.Populate(_cachedInventory); } private void OnItemSelected(GUIBoundKeyEventArgs args, ListData data) { if (args.Function != EngineKeyFunctions.UIClick) return; if (data is not VendorItemsListData { ItemIndex: var itemIndex }) return; if (_cachedInventory.Count == 0) return; var selectedItem = _cachedInventory.ElementAtOrDefault(itemIndex); if (selectedItem == null) return; SendMessage(new VendingMachineEjectMessage(selectedItem.Type, selectedItem.ID)); } protected override void Dispose(bool disposing) { base.Dispose(disposing); if (!disposing) return; if (_menu == null) return; _menu.OnItemSelected -= OnItemSelected; _menu.OnClose -= Close; _menu.Dispose(); } } }