-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathSmeltLine.cs
More file actions
38 lines (34 loc) · 1.82 KB
/
Copy pathSmeltLine.cs
File metadata and controls
38 lines (34 loc) · 1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
using System.Globalization;
using RustPlusBot.Features.ItemData.Data;
using RustPlusBot.Features.ItemData.Naming;
namespace RustPlusBot.Features.Commands.Formatting;
/// <summary>Formats the multi-line smelting reply for a smelter, one row per conversion (source order).</summary>
internal static class SmeltLine
{
/// <summary>Lists each conversion a smelter performs.</summary>
/// <param name="smelter">The smelter (with at least one conversion).</param>
/// <param name="names">Resolves input/output item ids to names.</param>
public static string Format(Smelter smelter, IItemNameResolver names)
{
ArgumentNullException.ThrowIfNull(smelter);
ArgumentNullException.ThrowIfNull(names);
var lines = smelter.Conversions.Select(c => FormatConversion(c, names));
return string.Create(CultureInfo.InvariantCulture, $"{smelter.Name}:\n{string.Join("\n", lines)}");
}
private static string FormatConversion(SmeltConversion conversion, IItemNameResolver names)
{
var input = names.Resolve(conversion.InputId);
var output = names.Resolve(conversion.OutputId);
var quantity = conversion.OutputQuantity > 1
? string.Create(CultureInfo.InvariantCulture, $"{conversion.OutputQuantity}× ")
: string.Empty;
var probability = conversion.OutputProbability < 1
? string.Create(CultureInfo.InvariantCulture, $" ({conversion.OutputProbability:0.#%})")
: string.Empty;
var fuel = conversion.WoodQuantity > 0
? string.Create(CultureInfo.InvariantCulture, $"{conversion.WoodQuantity:0.##} wood")
: "no fuel";
return string.Create(CultureInfo.InvariantCulture,
$"{input} → {quantity}{output}{probability} — {DurationFormat.Seconds(conversion.TimeSeconds)} · {fuel}");
}
}