using Content.Client.VendingMachines.UI; using Content.Shared.VendingMachines; using Robust.Client.GameObjects; using Robust.Client.UserInterface.Controls; 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(); var vendingMachineSys = EntMan.System(); _cachedInventory = vendingMachineSys.GetAllInventory(Owner); _menu = new VendingMachineMenu { Title = EntMan.GetComponent(Owner).EntityName }; _menu.OnClose += Close; _menu.OnItemSelected += OnItemSelected; _menu.Populate(_cachedInventory); _menu.OpenCentered(); } protected override void UpdateState(BoundUserInterfaceState state) { base.UpdateState(state); if (state is not VendingMachineInterfaceState newState) return; _cachedInventory = newState.Inventory; _menu?.Populate(_cachedInventory); } private void OnItemSelected(ItemList.ItemListSelectedEventArgs args) { if (_cachedInventory.Count == 0) return; var selectedItem = _cachedInventory.ElementAtOrDefault(args.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(); } } }