Add lathe recipe tooltips (#10158)

Co-authored-by: Kara <lunarautomaton6@gmail.com>
This commit is contained in:
Leon Friedrich
2022-07-31 15:35:11 +12:00
committed by GitHub
parent 7b356b7db7
commit a37e77a522

View File

@@ -1,4 +1,5 @@
using System.Collections.Generic; using System.Collections.Generic;
using System.Text;
using Content.Client.Lathe.Components; using Content.Client.Lathe.Components;
using Content.Shared.Lathe; using Content.Shared.Lathe;
using Content.Shared.Materials; using Content.Shared.Materials;
@@ -25,6 +26,8 @@ namespace Content.Client.Lathe.UI
public Button ServerConnectButton; public Button ServerConnectButton;
public Button ServerSyncButton; public Button ServerSyncButton;
public const float RecipeTooltipDelay = 0.5f;
public LatheBoundUserInterface Owner { get; } public LatheBoundUserInterface Owner { get; }
private readonly List<LatheRecipePrototype> _shownRecipes = new(); private readonly List<LatheRecipePrototype> _shownRecipes = new();
@@ -112,6 +115,14 @@ namespace Content.Client.Lathe.UI
SelectMode = ItemList.ItemListSelectMode.Button, SelectMode = ItemList.ItemListSelectMode.Button,
}; };
// This is a shitty hack, because item lists apparently don't actually support tooltips. Yay..
_items.OnItemHover += (ev) =>
{
ev.ItemList.HideTooltip();
ev.ItemList.ToolTip = ev.ItemList[ev.ItemIndex].TooltipText;
};
_items.TooltipDelay = RecipeTooltipDelay;
_items.OnItemSelected += ItemSelected; _items.OnItemSelected += ItemSelected;
_amountLineEdit = new LineEdit() _amountLineEdit = new LineEdit()
@@ -152,6 +163,9 @@ namespace Content.Client.Lathe.UI
public void ItemSelected(ItemList.ItemListSelectedEventArgs args) public void ItemSelected(ItemList.ItemListSelectedEventArgs args)
{ {
args.ItemList.HideTooltip();
args.ItemList.ToolTip = args.ItemList[args.ItemIndex].TooltipText;
int.TryParse(_amountLineEdit.Text, out var quantity); int.TryParse(_amountLineEdit.Text, out var quantity);
if (quantity <= 0) quantity = 1; if (quantity <= 0) quantity = 1;
Owner.Queue(_shownRecipes[args.ItemIndex], quantity); Owner.Queue(_shownRecipes[args.ItemIndex], quantity);
@@ -199,7 +213,26 @@ namespace Content.Client.Lathe.UI
_items.Clear(); _items.Clear();
foreach (var prototype in _shownRecipes) foreach (var prototype in _shownRecipes)
{ {
_items.AddItem(prototype.Name, prototype.Icon.Frame0()); var item = _items.AddItem(prototype.Name, prototype.Icon.Frame0());
StringBuilder sb = new();
bool first = true;
foreach (var (id, quantity) in prototype.RequiredMaterials)
{
if (!_prototypeManager.TryIndex<MaterialPrototype>(id, out var proto))
continue;
if (first)
first = false;
else
sb.Append("\n");
sb.Append(quantity.ToString());
sb.Append(" ");
sb.Append(proto.Name);
}
item.TooltipText = sb.ToString();
} }
PopulateDisabled(); PopulateDisabled();