Files
Operation-Blue-Laminate-v2/BlueLaminate/BlueLaminate.Core/Tradeups/TradeupGraph.cs
2026-06-02 13:31:27 -05:00

38 lines
1.6 KiB
C#

namespace BlueLaminate.Core.Tradeups;
/// <summary>
/// A skin that can come OUT of a tradeup, carrying the float bounds needed to map an
/// input average float onto this skin's own wear range. <see cref="StatTrakAvailable"/>
/// is recorded so the listing-side query (Phase C) can filter ST vs non-ST outputs;
/// the graph itself is ST-agnostic.
/// </summary>
public sealed record TradeupOutputSkin(
int SkinId,
string Name,
decimal FloatMin,
decimal FloatMax,
bool StatTrakAvailable);
/// <summary>
/// One tradeup "recipe slot": all eligible input skins of a single rarity within one
/// collection, and the set of output skins they produce (the next rarity tier present
/// in that collection). For a single-collection contract, ten inputs are drawn from
/// <see cref="InputSkinIds"/> and each of <see cref="OutputSkins"/> is an equally likely
/// outcome, so k_C = <c>OutputSkins.Count</c>.
/// </summary>
public sealed record TradeupInputGroup(
int CollectionId,
string CollectionName,
WeaponRarity InputRarity,
WeaponRarity OutputRarity,
IReadOnlyList<int> InputSkinIds,
IReadOnlyList<TradeupOutputSkin> OutputSkins);
/// <summary>
/// The full tradeup reference graph derived from the static catalogue: every
/// (collection, input rarity) → (output rarity, output skins) edge that yields a
/// 10-input weapon tradeup. Built once per process from the monthly-synced catalogue
/// (see <see cref="TradeupGraphBuilder"/>); contains no pricing or listing data.
/// </summary>
public sealed record TradeupGraph(IReadOnlyList<TradeupInputGroup> Groups);