| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- using Content.Client.Guidebook.Components;
- using Content.Shared.Chemistry;
- using Content.Shared.Containers.ItemSlots;
- using JetBrains.Annotations;
- using Robust.Client.GameObjects;
- using Robust.Client.UserInterface;
- namespace Content.Client.Chemistry.UI
- {
- /// <summary>
- /// Initializes a <see cref="ReagentDispenserWindow"/> and updates it when new server messages are received.
- /// </summary>
- [UsedImplicitly]
- public sealed class ReagentDispenserBoundUserInterface : BoundUserInterface
- {
- [ViewVariables]
- private ReagentDispenserWindow? _window;
- public ReagentDispenserBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
- {
- }
- /// <summary>
- /// Called each time a dispenser UI instance is opened. Generates the dispenser window and fills it with
- /// relevant info. Sets the actions for static buttons.
- /// <para>Buttons which can change like reagent dispense buttons have their actions set in <see cref="UpdateReagentsList"/>.</para>
- /// </summary>
- protected override void Open()
- {
- base.Open();
- // Setup window layout/elements
- _window = this.CreateWindow<ReagentDispenserWindow>();
- _window.Title = EntMan.GetComponent<MetaDataComponent>(Owner).EntityName;
- _window.HelpGuidebookIds = EntMan.GetComponent<GuideHelpComponent>(Owner).Guides;
- // Setup static button actions.
- _window.EjectButton.OnPressed += _ => SendMessage(new ItemSlotButtonPressedEvent(SharedReagentDispenser.OutputSlotName));
- _window.ClearButton.OnPressed += _ => SendMessage(new ReagentDispenserClearContainerSolutionMessage());
- _window.AmountGrid.OnButtonPressed += s => SendMessage(new ReagentDispenserSetDispenseAmountMessage(s));
- _window.OnDispenseReagentButtonPressed += (id) => SendMessage(new ReagentDispenserDispenseReagentMessage(id));
- _window.OnEjectJugButtonPressed += (id) => SendMessage(new ItemSlotButtonPressedEvent(id));
- }
- /// <summary>
- /// Update the UI each time new state data is sent from the server.
- /// </summary>
- /// <param name="state">
- /// Data of the <see cref="ReagentDispenserComponent"/> that this UI represents.
- /// Sent from the server.
- /// </param>
- protected override void UpdateState(BoundUserInterfaceState state)
- {
- base.UpdateState(state);
- var castState = (ReagentDispenserBoundUserInterfaceState) state;
- _window?.UpdateState(castState); //Update window state
- }
- }
- }
|