using Content.Shared.Chemistry; using Content.Shared.Chemistry.Dispenser; using Content.Shared.Containers.ItemSlots; using JetBrains.Annotations; using Robust.Client.GameObjects; namespace Content.Client.Chemistry.UI { /// /// Initializes a and updates it when new server messages are received. /// [UsedImplicitly] public sealed class ChemMasterBoundUserInterface : BoundUserInterface { [Dependency] private readonly IEntityManager _entityManager = default!; private ChemMasterWindow? _window; public ChemMasterBoundUserInterface(ClientUserInterfaceComponent owner, Enum uiKey) : base(owner, uiKey) { } /// /// Called each time a chem master UI instance is opened. Generates the window and fills it with /// relevant info. Sets the actions for static buttons. /// protected override void Open() { base.Open(); // Setup window layout/elements _window = new ChemMasterWindow { Title = _entityManager.GetComponent(Owner.Owner).EntityName, }; _window.OpenCentered(); _window.OnClose += Close; // Setup static button actions. _window.InputEjectButton.OnPressed += _ => SendMessage( new ItemSlotButtonPressedEvent(SharedChemMaster.InputSlotName)); _window.OutputEjectButton.OnPressed += _ => SendMessage( new ItemSlotButtonPressedEvent(SharedChemMaster.OutputSlotName)); _window.BufferTransferButton.OnPressed += _ => SendMessage( new ChemMasterSetModeMessage(ChemMasterMode.Transfer)); _window.BufferDiscardButton.OnPressed += _ => SendMessage( new ChemMasterSetModeMessage(ChemMasterMode.Discard)); _window.CreatePillButton.OnPressed += _ => SendMessage( new ChemMasterCreatePillsMessage( (uint)_window.PillDosage.Value, (uint)_window.PillNumber.Value, _window.LabelLine)); _window.CreateBottleButton.OnPressed += _ => SendMessage( new ChemMasterOutputToBottleMessage((uint)_window.BottleDosage.Value, _window.LabelLine)); for (uint i = 0; i < _window.PillTypeButtons.Length; i++) { var pillType = i; _window.PillTypeButtons[i].OnPressed += _ => SendMessage(new ChemMasterSetPillTypeMessage(pillType)); } _window.OnReagentButtonPressed += (args, button) => SendMessage(new ChemMasterReagentAmountButtonMessage(button.Id, button.Amount, button.IsBuffer)); } /// /// Update the ui each time new state data is sent from the server. /// /// /// Data of the that this ui represents. /// Sent from the server. /// protected override void UpdateState(BoundUserInterfaceState state) { base.UpdateState(state); var castState = (ChemMasterBoundUserInterfaceState) state; _window?.UpdateState(castState); // Update window state } protected override void Dispose(bool disposing) { base.Dispose(disposing); if (disposing) { _window?.Dispose(); } } } }