Add a container display to dispenser UI (#25391)

* Implemented contents display for dispenser UI

* Update Content.Client/Chemistry/UI/ReagentDispenserWindow.xaml.cs

Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>

* Resolve the netent into a euid first

---------

Co-authored-by: Nemanja <98561806+EmoGarbage404@users.noreply.github.com>
This commit is contained in:
Tayrtahn
2024-02-25 18:03:22 -05:00
committed by GitHub
parent b26acc9547
commit 100ece2e20
4 changed files with 30 additions and 21 deletions

View File

@@ -32,19 +32,22 @@
StyleClasses="OpenLeft"/> StyleClasses="OpenLeft"/>
</BoxContainer> </BoxContainer>
<Control MinSize="0 10"/> <Control MinSize="0 10"/>
<ScrollContainer HScrollEnabled="False" HorizontalExpand="True" VerticalExpand="True" MinSize="0 160"> <BoxContainer Orientation="Horizontal">
<PanelContainer VerticalExpand="True" <SpriteView Name="View" Scale="4 4" MinSize="150 150"/>
SizeFlagsStretchRatio="6" <ScrollContainer HScrollEnabled="False" HorizontalExpand="True" VerticalExpand="True" MinSize="0 160">
MinSize="0 150"> <PanelContainer VerticalExpand="True"
<PanelContainer.PanelOverride> SizeFlagsStretchRatio="6"
<gfx:StyleBoxFlat BackgroundColor="#1b1b1e" /> MinSize="0 150">
</PanelContainer.PanelOverride> <PanelContainer.PanelOverride>
<BoxContainer Name="ContainerInfo" <gfx:StyleBoxFlat BackgroundColor="#1b1b1e" />
Orientation="Vertical" </PanelContainer.PanelOverride>
HorizontalExpand="True"> <BoxContainer Name="ContainerInfo"
<Label Text="{Loc 'reagent-dispenser-window-no-container-loaded-text'}"/> Orientation="Vertical"
</BoxContainer> HorizontalExpand="True">
</PanelContainer> <Label Text="{Loc 'reagent-dispenser-window-no-container-loaded-text'}"/>
</ScrollContainer> </BoxContainer>
</PanelContainer>
</ScrollContainer>
</BoxContainer>
</BoxContainer> </BoxContainer>
</DefaultWindow> </DefaultWindow>

View File

@@ -1,4 +1,3 @@
using System.Linq;
using Content.Client.Stylesheets; using Content.Client.Stylesheets;
using Content.Shared.Chemistry; using Content.Shared.Chemistry;
using Content.Shared.Chemistry.Reagent; using Content.Shared.Chemistry.Reagent;
@@ -19,6 +18,7 @@ namespace Content.Client.Chemistry.UI
public sealed partial class ReagentDispenserWindow : DefaultWindow public sealed partial class ReagentDispenserWindow : DefaultWindow
{ {
[Dependency] private readonly IPrototypeManager _prototypeManager = default!; [Dependency] private readonly IPrototypeManager _prototypeManager = default!;
[Dependency] private readonly IEntityManager _entityManager = default!;
public event Action<BaseButton.ButtonEventArgs, DispenseReagentButton>? OnDispenseReagentButtonPressed; public event Action<BaseButton.ButtonEventArgs, DispenseReagentButton>? OnDispenseReagentButtonPressed;
public event Action<GUIMouseHoverEventArgs, DispenseReagentButton>? OnDispenseReagentButtonMouseEntered; public event Action<GUIMouseHoverEventArgs, DispenseReagentButton>? OnDispenseReagentButtonMouseEntered;
public event Action<GUIMouseHoverEventArgs, DispenseReagentButton>? OnDispenseReagentButtonMouseExited; public event Action<GUIMouseHoverEventArgs, DispenseReagentButton>? OnDispenseReagentButtonMouseExited;
@@ -52,7 +52,7 @@ namespace Content.Client.Chemistry.UI
/// Update the button grid of reagents which can be dispensed. /// Update the button grid of reagents which can be dispensed.
/// </summary> /// </summary>
/// <param name="inventory">Reagents which can be dispensed by this dispenser</param> /// <param name="inventory">Reagents which can be dispensed by this dispenser</param>
public void UpdateReagentsList(List<KeyValuePair<string, KeyValuePair<string,string>>> inventory) public void UpdateReagentsList(List<KeyValuePair<string, KeyValuePair<string, string>>> inventory)
{ {
if (ChemicalList == null) if (ChemicalList == null)
return; return;
@@ -86,6 +86,9 @@ namespace Content.Client.Chemistry.UI
UpdateContainerInfo(castState); UpdateContainerInfo(castState);
UpdateReagentsList(castState.Inventory); UpdateReagentsList(castState.Inventory);
_entityManager.TryGetEntity(castState.OutputContainerEntity, out var outputContainerEnt);
View.SetEntity(outputContainerEnt);
// Disable the Clear & Eject button if no beaker // Disable the Clear & Eject button if no beaker
ClearButton.Disabled = castState.OutputContainer is null; ClearButton.Disabled = castState.OutputContainer is null;
EjectButton.Disabled = castState.OutputContainer is null; EjectButton.Disabled = castState.OutputContainer is null;
@@ -134,7 +137,7 @@ namespace Content.Client.Chemistry.UI
if (state.OutputContainer is null) if (state.OutputContainer is null)
{ {
ContainerInfo.Children.Add(new Label {Text = Loc.GetString("reagent-dispenser-window-no-container-loaded-text") }); ContainerInfo.Children.Add(new Label { Text = Loc.GetString("reagent-dispenser-window-no-container-loaded-text") });
return; return;
} }
@@ -159,11 +162,11 @@ namespace Content.Client.Chemistry.UI
? p.LocalizedName ? p.LocalizedName
: Loc.GetString("reagent-dispenser-window-reagent-name-not-found-text"); : Loc.GetString("reagent-dispenser-window-reagent-name-not-found-text");
var nameLabel = new Label {Text = $"{localizedName}: "}; var nameLabel = new Label { Text = $"{localizedName}: " };
var quantityLabel = new Label var quantityLabel = new Label
{ {
Text = Loc.GetString("reagent-dispenser-window-quantity-label-text", ("quantity", quantity)), Text = Loc.GetString("reagent-dispenser-window-quantity-label-text", ("quantity", quantity)),
StyleClasses = {StyleNano.StyleClassLabelSecondaryColor}, StyleClasses = { StyleNano.StyleClassLabelSecondaryColor },
}; };
ContainerInfo.Children.Add(new BoxContainer ContainerInfo.Children.Add(new BoxContainer

View File

@@ -68,7 +68,7 @@ namespace Content.Server.Chemistry.EntitySystems
var inventory = GetInventory(reagentDispenser); var inventory = GetInventory(reagentDispenser);
var state = new ReagentDispenserBoundUserInterfaceState(outputContainerInfo, inventory, reagentDispenser.Comp.DispenseAmount); var state = new ReagentDispenserBoundUserInterfaceState(outputContainerInfo, GetNetEntity(outputContainer), inventory, reagentDispenser.Comp.DispenseAmount);
_userInterfaceSystem.TrySetUiState(reagentDispenser, ReagentDispenserUiKey.Key, state); _userInterfaceSystem.TrySetUiState(reagentDispenser, ReagentDispenserUiKey.Key, state);
} }

View File

@@ -56,6 +56,8 @@ namespace Content.Shared.Chemistry
public sealed class ReagentDispenserBoundUserInterfaceState : BoundUserInterfaceState public sealed class ReagentDispenserBoundUserInterfaceState : BoundUserInterfaceState
{ {
public readonly ContainerInfo? OutputContainer; public readonly ContainerInfo? OutputContainer;
public readonly NetEntity? OutputContainerEntity;
/// <summary> /// <summary>
/// A list of the reagents which this dispenser can dispense. /// A list of the reagents which this dispenser can dispense.
/// </summary> /// </summary>
@@ -63,9 +65,10 @@ namespace Content.Shared.Chemistry
public readonly ReagentDispenserDispenseAmount SelectedDispenseAmount; public readonly ReagentDispenserDispenseAmount SelectedDispenseAmount;
public ReagentDispenserBoundUserInterfaceState(ContainerInfo? outputContainer, List<KeyValuePair<string, KeyValuePair<string, string>>> inventory, ReagentDispenserDispenseAmount selectedDispenseAmount) public ReagentDispenserBoundUserInterfaceState(ContainerInfo? outputContainer, NetEntity? outputContainerEntity, List<KeyValuePair<string, KeyValuePair<string, string>>> inventory, ReagentDispenserDispenseAmount selectedDispenseAmount)
{ {
OutputContainer = outputContainer; OutputContainer = outputContainer;
OutputContainerEntity = outputContainerEntity;
Inventory = inventory; Inventory = inventory;
SelectedDispenseAmount = selectedDispenseAmount; SelectedDispenseAmount = selectedDispenseAmount;
} }