XFE Git
XFE Studio Git
Git 首页 全局搜索
XFE 主站 文档 NuGet

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Text.Json;
using XFEEDToolBox.Core.Models;
namespace XFEEDToolBox.Core.Engineering;

public sealed record EngineeringRules
{
    public string Source { get; init; } = "";
    public double ProgressPercent { get; init; }
    public Dictionary<int, double> ReputationThresholds { get; init; } = [];
    public Dictionary<int, double> ReputationRewards { get; init; } = [];
    public static EngineeringRules Captured { get; } = Read();
    private static EngineeringRules Read()
    {
        using var stream = typeof(EngineeringRules).Assembly.GetManifestResourceStream("XFEEDToolBox.Core.Engineering.rules.json")!;
        return JsonSerializer.Deserialize<EngineeringRules>(stream, ToolboxSettings.JsonOptions)!;
    }
    public int Rank(double reputation) => ReputationThresholds.Where(p => reputation + 1e-8 >= p.Value).Max(p => p.Key);
    public double Absolute(int rank, double progress) => rank >= 5 ? ReputationThresholds[5] : ReputationThresholds[rank] + Math.Clamp(progress, 0, 100) / 100 * (ReputationThresholds[rank + 1] - ReputationThresholds[rank]);
    public double WithinRank(double reputation) { var rank = Rank(reputation); return rank == 5 ? 100 : 100 * (reputation - ReputationThresholds[rank]) / (ReputationThresholds[rank + 1] - ReputationThresholds[rank]); }
    public double Reward(int grade) => ReputationRewards.GetValueOrDefault(grade);
    // Verified against the user's live post-18.08 EngineerCraft quality sequences.
    public static double QualityGain(int grade, int rank) => 1.0 / (grade + 5 - rank);
}