Skip to content

Commit

Permalink
Merge branch 'master' into 2024-09-07-Caveman
Browse files Browse the repository at this point in the history
  • Loading branch information
dvir001 authored Oct 13, 2024
2 parents 2a86750 + b822f7d commit a0c3536
Show file tree
Hide file tree
Showing 141 changed files with 4,038 additions and 2,387 deletions.
21 changes: 21 additions & 0 deletions Content.Client/Kitchen/UI/MicrowaveBoundUserInterface.cs
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,24 @@ public sealed class MicrowaveBoundUserInterface : BoundUserInterface
[ViewVariables]
private readonly Dictionary<int, ReagentQuantity> _reagents = new();

// Frontier: UI parameters
private readonly string _menuTitle;
private readonly string _leftFlavorText;

public MicrowaveBoundUserInterface(EntityUid owner, Enum uiKey) : base(owner, uiKey)
{
// Frontier: switch UI params based on key
if ((MicrowaveUiKey)uiKey == MicrowaveUiKey.ElectricRangeKey)
{
_menuTitle = "microwave-menu-range-title";
_leftFlavorText = "microwave-menu-range-footer-flavor-left";
}
else
{
_menuTitle = "microwave-menu-title";
_leftFlavorText = "microwave-menu-footer-flavor-left";
}
// End Frontier
}

protected override void Open()
Expand Down Expand Up @@ -60,6 +76,11 @@ protected override void Open()
("time", Loc.GetString("microwave-menu-instant-button")));
}
};

// Frontier: UI customization
_menu.Title = Loc.GetString(_menuTitle);
_menu.LeftFooter.Text = Loc.GetString(_leftFlavorText);
// End Frontier
}

protected override void UpdateState(BoundUserInterfaceState state)
Expand Down
2 changes: 1 addition & 1 deletion Content.Client/Kitchen/UI/MicrowaveMenu.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@
<BoxContainer Orientation="Vertical">
<PanelContainer StyleClasses="LowDivider" />
<BoxContainer Orientation="Horizontal" Margin="10 2 5 0" VerticalAlignment="Bottom">
<Label Text="{Loc 'microwave-menu-footer-flavor-left'}" StyleClasses="WindowFooterText" />
<Label Text="{Loc 'microwave-menu-footer-flavor-left'}" StyleClasses="WindowFooterText" Name="LeftFooter" Access="Public"/> <!-- Frontier: add Name, Access -->
<Label Text="{Loc 'microwave-menu-footer-flavor-right'}" StyleClasses="WindowFooterText"
HorizontalAlignment="Right" HorizontalExpand="True" Margin="0 0 5 0" />
<TextureRect StyleClasses="NTLogoDark" Stretch="KeepAspectCentered" VerticalAlignment="Center" HorizontalAlignment="Right" SetSize="19 19"/>
Expand Down
5 changes: 2 additions & 3 deletions Content.Client/_EE/Guidebook/Controls/GuideFoodSource.xaml
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,8 @@
Margin="2 0 0 0"/> <!-- Frontier: Label<RichTextLabel -->
</BoxContainer>
<BoxContainer Orientation="Vertical" VerticalAlignment="Center" HorizontalAlignment="Center"> <!-- Frontier: remove HorizontalExpand -->
<TextureRect HorizontalAlignment="Center"
Name="ProcessingTexture"
Access="Public"/>
<BoxContainer Orientation="Horizontal" VerticalAlignment="Center" HorizontalAlignment="Center" VerticalExpand="True" Name="ProcessingTextures"> <!-- Frontier: support for multiple machines -->
</BoxContainer>
<RichTextLabel Name="ProcessingLabel"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Expand Down
58 changes: 53 additions & 5 deletions Content.Client/_EE/Guidebook/Controls/GuideFoodSource.xaml.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using Content.Client.UserInterface.ControlExtensions;
using Content.Shared.Chemistry.Reagent;
using Content.Shared.FixedPoint;
using Content.Shared.Kitchen; // Frontier
using Content.Shared.Nutrition.Components;
using JetBrains.Annotations;
using Robust.Client.AutoGenerated;
Expand Down Expand Up @@ -63,11 +64,13 @@ private void GenerateControl(FoodButcheringData entry)
SetSource(ent);
ProcessingLabel.Text = Loc.GetString("guidebook-food-processing-butchering");

ProcessingTexture.Texture = entry.Type switch
var processingTexture = new TextureRect(); // Frontier
processingTexture.Texture = entry.Type switch
{
ButcheringType.Knife => GetRsiTexture("/Textures/Objects/Weapons/Melee/kitchen_knife.rsi", "icon"),
_ => GetRsiTexture("/Textures/Structures/meat_spike.rsi", "spike")
};
ProcessingTextures.AddChild(processingTexture); // Frontier
}

private void GenerateControl(FoodSlicingData entry)
Expand All @@ -80,7 +83,9 @@ private void GenerateControl(FoodSlicingData entry)

SetSource(ent);
ProcessingLabel.Text = Loc.GetString("guidebook-food-processing-slicing");
ProcessingTexture.Texture = GetRsiTexture("/Textures/Objects/Misc/utensils.rsi", "plastic_knife");
var processingTexture = new TextureRect(); // Frontier
processingTexture.Texture = GetRsiTexture("/Textures/Objects/Misc/utensils.rsi", "plastic_knife");
ProcessingTextures.AddChild(processingTexture); // Frontier
}

private void GenerateControl(FoodRecipeData entry)
Expand All @@ -101,8 +106,49 @@ private void GenerateControl(FoodRecipeData entry)
var combinedIngredients = string.Join("\n", combinedLiquids.Union(combinedSolids));
SourceLabel.Text = Loc.GetString("guidebook-food-processing-recipe", ("ingredients", combinedIngredients)); // Frontier: SetMessage<Text

ProcessingTexture.Texture = GetRsiTexture("/Textures/Structures/Machines/microwave.rsi", "mw");
ProcessingLabel.Text = Loc.GetString("guidebook-food-processing-cooking", ("time", recipe.CookTime));
// Frontier: multiple machine types
var recipeType = (MicrowaveRecipeType)recipe.RecipeType;
TextureRect processingTexture;
List<string> processingTypes = new();
if (recipeType.HasFlag(MicrowaveRecipeType.Microwave))
{
processingTexture = new TextureRect();
if (recipe.SecretRecipe)
processingTexture.Texture = GetRsiTexture("/Textures/Structures/Machines/microwave_syndie.rsi", "mw");
else
processingTexture.Texture = GetRsiTexture("/Textures/Structures/Machines/microwave.rsi", "mw");
ProcessingTextures.AddChild(processingTexture);
processingTypes.Add(Loc.GetString("guidebook-food-processing-type-microwave"));
}
if (recipeType.HasFlag(MicrowaveRecipeType.Oven))
{
processingTexture = new TextureRect();
if (recipe.SecretRecipe)
processingTexture.Texture = GetRsiTexture("/Textures/_NF/Structures/Machines/oven_syndie.rsi", "composite_off");
else
processingTexture.Texture = GetRsiTexture("/Textures/_NF/Structures/Machines/oven.rsi", "composite_off");
ProcessingTextures.AddChild(processingTexture);
processingTypes.Add(Loc.GetString("guidebook-food-processing-type-oven"));
}
if (recipeType.HasFlag(MicrowaveRecipeType.Assembler))
{
processingTexture = new TextureRect();
processingTexture.Texture = GetRsiTexture("/Textures/_NF/Structures/Machines/assembler.rsi", "assembler");
ProcessingTextures.AddChild(processingTexture);
processingTypes.Add(Loc.GetString("guidebook-food-processing-type-assembler"));
}
if (recipeType.HasFlag(MicrowaveRecipeType.MedicalAssembler))
{
processingTexture = new TextureRect();
processingTexture.Texture = GetRsiTexture("/Textures/_NF/Structures/Machines/medical_assembler.rsi", "mediwave-base");
ProcessingTextures.AddChild(processingTexture);
processingTypes.Add(Loc.GetString("guidebook-food-processing-type-medical-assembler"));
}
if (processingTypes.Count <= 0)
processingTypes.Add(Loc.GetString("guidebook-food-processing-type-generic"));
var processingTypeString = string.Join('/', processingTypes);
// End Frontier
ProcessingLabel.Text = Loc.GetString("guidebook-food-processing-cooking", ("processingTypes", processingTypeString), ("time", recipe.CookTime));
}

private void GenerateControl(FoodReactionData entry)
Expand All @@ -118,7 +164,9 @@ private void GenerateControl(FoodReactionData entry)
.Where(it => it.Length > 0);

SourceLabel.Text = Loc.GetString("guidebook-food-processing-recipe", ("ingredients", string.Join("\n", combinedReagents))); // Frontier: SetMessage<Text
ProcessingTexture.TexturePath = "/Textures/Interface/Misc/beakerlarge.png";
var processingTexture = new TextureRect(); // Frontier
processingTexture.TexturePath = "/Textures/Interface/Misc/beakerlarge.png";
ProcessingTextures.AddChild(processingTexture); // Frontier
ProcessingLabel.Text = Loc.GetString("guidebook-food-processing-reaction");
}

Expand Down
29 changes: 29 additions & 0 deletions Content.Client/_NF/CartridgeLoader/Cartridges/AppraisalUi.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
using Content.Client.UserInterface.Fragments;
using Content.Shared.CartridgeLoader.Cartridges;
using Robust.Client.GameObjects;
using Robust.Client.UserInterface;

namespace Content.Client._NF.CartridgeLoader.Cartridges;

public sealed partial class AppraisalUi : UIFragment
{
private AppraisalUiFragment? _fragment;

public override Control GetUIFragmentRoot()
{
return _fragment!;
}

public override void Setup(BoundUserInterface userInterface, EntityUid? fragmentOwner)
{
_fragment = new AppraisalUiFragment();
}

public override void UpdateState(BoundUserInterfaceState state)
{
if (state is not AppraisalUiState appraisalUiState)
return;

_fragment?.UpdateState(appraisalUiState.AppraisedItems);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<cartridges:AppraisalUiFragment xmlns:cartridges="clr-namespace:Content.Client._NF.CartridgeLoader.Cartridges"
xmlns="https://spacestation14.io" Margin="1 0 2 0">
<PanelContainer StyleClasses="BackgroundDark"></PanelContainer>
<BoxContainer Orientation="Vertical" HorizontalExpand="True" VerticalExpand="True">
<BoxContainer Orientation="Vertical" MinHeight="32" MaxHeight="32" VerticalAlignment="Top" Margin="3 0">
<PanelContainer Name="HeaderPanel">
<BoxContainer Orientation="Horizontal" HorizontalExpand="True" Margin="4">
<Label HorizontalExpand="True" Text="{Loc 'appraisal-label-name'}"/>
<Label HorizontalExpand="True" Text="{Loc 'appraisal-label-price'}"/>
</BoxContainer>
</PanelContainer>
</BoxContainer>
<ScrollContainer Name="ScrollContainer" HorizontalExpand="True" VerticalExpand="True">
<BoxContainer Orientation="Vertical" Name="AppraisedItemContainer" HorizontalExpand="True" VerticalExpand="True" VerticalAlignment="Top" Margin="3 0"/>
</ScrollContainer>
</BoxContainer>
</cartridges:AppraisalUiFragment>
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
using Content.Shared.CartridgeLoader.Cartridges;
using Robust.Client.AutoGenerated;
using Robust.Client.Graphics;
using Robust.Client.UserInterface.Controls;
using Robust.Client.UserInterface.XAML;

namespace Content.Client._NF.CartridgeLoader.Cartridges;

[GenerateTypedNameReferences]
public sealed partial class AppraisalUiFragment : BoxContainer
{
private readonly StyleBoxFlat _styleBox = new()
{
BackgroundColor = Color.Transparent,
BorderColor = Color.FromHex("#5a5a5a"),
BorderThickness = new Thickness(0, 0, 0, 1)
};

public AppraisalUiFragment()
{
RobustXamlLoader.Load(this);
Orientation = LayoutOrientation.Vertical;
HorizontalExpand = true;
VerticalExpand = true;
HeaderPanel.PanelOverride = _styleBox;
}

public void UpdateState(List<AppraisedItem> items)
{
AppraisedItemContainer.RemoveAllChildren();

//Reverse the list so the oldest entries appear at the bottom
items.Reverse();

//Enable scrolling if there are more entries that can fit on the screen
ScrollContainer.HScrollEnabled = items.Count > 9;

foreach (var item in items)
{
AddAppraisedItem(item);
}
}

private void AddAppraisedItem(AppraisedItem item)
{
var row = new BoxContainer();
row.HorizontalExpand = true;
row.Orientation = LayoutOrientation.Horizontal;
row.Margin = new Thickness(4);

var nameLabel = new Label();
nameLabel.Text = item.Name;
nameLabel.HorizontalExpand = true;
nameLabel.ClipText = true;
row.AddChild(nameLabel);

var valueLabel = new Label();
valueLabel.Text = item.AppraisedPrice;
valueLabel.HorizontalExpand = true;
valueLabel.ClipText = true;
row.AddChild(valueLabel);

AppraisedItemContainer.AddChild(row);
}
}
125 changes: 125 additions & 0 deletions Content.Client/_NF/Kitchen/UI/AssemblerBoundUserInterface.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,125 @@
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);
}
}
}
}
Loading

0 comments on commit a0c3536

Please sign in to comment.