using Robust.Client.GameObjects.Components.UserInterface; using Content.Shared.Kitchen; using Robust.Shared.GameObjects.Components.UserInterface; using Robust.Shared.IoC; using Robust.Shared.Prototypes; using Content.Shared.Chemistry; using Robust.Shared.GameObjects; using System.Collections.Generic; using Robust.Shared.Interfaces.GameObjects; using Robust.Client.GameObjects; using Robust.Client.UserInterface.Controls; namespace Content.Client.GameObjects.Components.Kitchen { public class MicrowaveBoundUserInterface : BoundUserInterface { #pragma warning disable 649 [Dependency] private readonly IEntityManager _entityManager; [Dependency] private readonly IPrototypeManager _prototypeManager; #pragma warning restore 649 private MicrowaveMenu _menu; private Dictionary _solids = new Dictionary(); private Dictionary _reagents =new Dictionary(); public MicrowaveBoundUserInterface(ClientUserInterfaceComponent owner, object uiKey) : base(owner,uiKey) { } protected override void Open() { base.Open(); _menu = new MicrowaveMenu(this); _menu.OpenCentered(); _menu.OnClose += Close; _menu.StartButton.OnPressed += args => SendMessage(new SharedMicrowaveComponent.MicrowaveStartCookMessage()); _menu.EjectButton.OnPressed += args => SendMessage(new SharedMicrowaveComponent.MicrowaveEjectMessage()); _menu.IngredientsList.OnItemSelected += args => { SendMessage(new SharedMicrowaveComponent.MicrowaveEjectSolidIndexedMessage(_solids[args.ItemIndex])); }; _menu.IngredientsListReagents.OnItemSelected += args => { SendMessage( new SharedMicrowaveComponent.MicrowaveVaporizeReagentIndexedMessage(_reagents[args.ItemIndex])); }; _menu.OnCookTimeSelected += args => { var actualButton = args.Button as Button; var newTime = (uint) int.Parse(actualButton.Text); _menu.VisualCookTime = newTime; SendMessage(new SharedMicrowaveComponent.MicrowaveSelectCookTimeMessage(newTime)); }; } protected override void Dispose(bool disposing) { base.Dispose(disposing); if (!disposing) { return; } _solids?.Clear(); _menu?.Dispose(); } protected override void UpdateState(BoundUserInterfaceState state) { base.UpdateState(state); if (!(state is MicrowaveUpdateUserInterfaceState cstate)) { return; } _menu.ToggleBusyDisableOverlayPanel(cstate.IsMicrowaveBusy); RefreshContentsDisplay(cstate.ReagentsReagents, cstate.ContainedSolids); } private void RefreshContentsDisplay(IReadOnlyList reagents, List solids) { _reagents.Clear(); _menu.IngredientsListReagents.Clear(); foreach (var reagent in reagents) { _prototypeManager.TryIndex(reagent.ReagentId, out ReagentPrototype proto); var reagentAdded = _menu.IngredientsListReagents.AddItem($"{reagent.Quantity} {proto.Name}"); var reagentIndex = _menu.IngredientsListReagents.IndexOf(reagentAdded); _reagents.Add(reagentIndex, reagent); } _solids.Clear(); _menu.IngredientsList.Clear(); foreach (var entityID in solids) { if (!_entityManager.TryGetEntity(entityID, out var entity)) { return; } if (!entity.Deleted && entity.TryGetComponent(out IconComponent icon)) { var solidItem = _menu.IngredientsList.AddItem(entity.Name, icon.Icon.Default); var solidIndex = _menu.IngredientsList.IndexOf(solidItem); _solids.Add(solidIndex, entityID); } } } } }