126 lines
4.7 KiB
C#
126 lines
4.7 KiB
C#
using Content.Shared._NF.Kitchen.Components;
|
|
using Content.Shared.Chemistry.Reagent;
|
|
using Content.Shared.Kitchen.Components;
|
|
using JetBrains.Annotations;
|
|
using Robust.Client.GameObjects;
|
|
using Robust.Client.Graphics;
|
|
using Robust.Client.UserInterface;
|
|
|
|
namespace Content.Client._NF.Kitchen.UI
|
|
{
|
|
[UsedImplicitly]
|
|
public sealed class AssemblerBoundUserInterface : BoundUserInterface
|
|
{
|
|
[ViewVariables]
|
|
private AssemblerMenu? _menu;
|
|
|
|
[ViewVariables]
|
|
private readonly Dictionary<int, EntityUid> _solids = new();
|
|
|
|
[ViewVariables]
|
|
private readonly Dictionary<int, ReagentQuantity> _reagents = new();
|
|
|
|
private readonly string _menuTitle;
|
|
private readonly string _leftFlavorText;
|
|
|
|
public AssemblerBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
|
|
{
|
|
if ((MicrowaveUiKey)uiKey == MicrowaveUiKey.MedicalAssemblerKey)
|
|
{
|
|
_menuTitle = "assembler-menu-medical-title";
|
|
_leftFlavorText = "assembler-menu-medical-footer-flavor-left";
|
|
}
|
|
else
|
|
{
|
|
_menuTitle = "assembler-menu-title";
|
|
_leftFlavorText = "assembler-menu-footer-flavor-left";
|
|
}
|
|
}
|
|
|
|
protected override void Open()
|
|
{
|
|
base.Open();
|
|
_menu = this.CreateWindow<AssemblerMenu>();
|
|
_menu.StartButton.OnPressed += _ => SendPredictedMessage(new AssemblerStartCookMessage());
|
|
_menu.EjectButton.OnPressed += _ => SendPredictedMessage(new MicrowaveEjectMessage());
|
|
_menu.IngredientsList.OnItemSelected += args =>
|
|
{
|
|
SendPredictedMessage(new MicrowaveEjectSolidIndexedMessage(EntMan.GetNetEntity(_solids[args.ItemIndex])));
|
|
};
|
|
|
|
_menu.Title = Loc.GetString(_menuTitle);
|
|
_menu.LeftFooter.Text = Loc.GetString(_leftFlavorText);
|
|
}
|
|
|
|
protected override void UpdateState(BoundUserInterfaceState state)
|
|
{
|
|
base.UpdateState(state);
|
|
if (state is not MicrowaveUpdateUserInterfaceState cState || _menu == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
_menu.IsBusy = cState.IsMicrowaveBusy;
|
|
_menu.CurrentCooktimeEnd = cState.CurrentCookTimeEnd;
|
|
|
|
_menu.ToggleBusyDisableOverlayPanel(cState.IsMicrowaveBusy || cState.ContainedSolids.Length == 0);
|
|
// TODO move this to a component state and ensure the net ids.
|
|
RefreshContentsDisplay(EntMan.GetEntityArray(cState.ContainedSolids));
|
|
|
|
//Set the cook time info label
|
|
var cookTime = cState.CurrentCookTime.ToString();
|
|
|
|
_menu.CookTimeInfoLabel.Text = Loc.GetString("assembler-bound-user-interface-insert-ingredients");
|
|
_menu.StartButton.Disabled = cState.IsMicrowaveBusy || cState.ContainedSolids.Length == 0;
|
|
_menu.EjectButton.Disabled = cState.IsMicrowaveBusy || cState.ContainedSolids.Length == 0;
|
|
|
|
//Set the "micowave light" ui color to indicate if the microwave is busy or not
|
|
if (cState.IsMicrowaveBusy && cState.ContainedSolids.Length > 0)
|
|
{
|
|
_menu.IngredientsPanel.PanelOverride = new StyleBoxFlat { BackgroundColor = Color.FromHex("#947300") };
|
|
}
|
|
else
|
|
{
|
|
_menu.IngredientsPanel.PanelOverride = new StyleBoxFlat { BackgroundColor = Color.FromHex("#1B1B1E") };
|
|
}
|
|
}
|
|
|
|
private void RefreshContentsDisplay(EntityUid[] containedSolids)
|
|
{
|
|
_reagents.Clear();
|
|
|
|
if (_menu == null) return;
|
|
|
|
_solids.Clear();
|
|
_menu.IngredientsList.Clear();
|
|
foreach (var entity in containedSolids)
|
|
{
|
|
if (EntMan.Deleted(entity))
|
|
{
|
|
return;
|
|
}
|
|
|
|
// TODO just use sprite view
|
|
|
|
Texture? texture;
|
|
if (EntMan.TryGetComponent<IconComponent>(entity, out var iconComponent))
|
|
{
|
|
texture = EntMan.System<SpriteSystem>().GetIcon(iconComponent);
|
|
}
|
|
else if (EntMan.TryGetComponent<SpriteComponent>(entity, out var spriteComponent))
|
|
{
|
|
texture = spriteComponent.Icon?.Default;
|
|
}
|
|
else
|
|
{
|
|
continue;
|
|
}
|
|
|
|
var solidItem = _menu.IngredientsList.AddItem(EntMan.GetComponent<MetaDataComponent>(entity).EntityName, texture);
|
|
var solidIndex = _menu.IngredientsList.IndexOf(solidItem);
|
|
_solids.Add(solidIndex, entity);
|
|
}
|
|
}
|
|
}
|
|
}
|