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

XFEEDToolBox

【WinUI】XFE精英危险工具箱

公开
关注 0 Fork 0 Star 0
UTF-8
using System.Globalization;
using XFEEDToolBox.Core.Outfitting;

namespace XFEEDToolBox.Core.Presentation;

public static class EquipmentStatusRows
{
    public static IReadOnlyList<RefitPropertyRow> Module(IReadOnlyDictionary<string,double> values)
    {
        var rows=new List<RefitPropertyRow>();
        void Add(string key,string name,string english,string format,string unit="")
        {
            if(values.TryGetValue(key,out var value)&&double.IsFinite(value))
                rows.Add(new(name,english,value.ToString(format,CultureInfo.InvariantCulture)+unit));
        }
        Add("mass","质量","Mass","N2"," t");
        Add("integ","耐久度","Structural integrity","N0");
        Add("pwrdraw","电量消耗","Power draw","N2"," MW");
        Add("pwrcap","总功率","Power capacity","N2"," MW");
        Add("heateff","热效率","Heat efficiency","N2");
        Add("dps","每秒伤害","Damage per second","N1"," /s");
        Add("distdraw","能量分配器消耗","Distributor draw","N2"," MW");
        Add("pierce","穿甲能力","Armour penetration","N0");
        Add("maximumrng","最大射程","Maximum range","N0"," m");
        Add("shotspd","膛速","Projectile speed","N0"," m/s");
        Add("rof","射速","Rate of fire","N1"," /s");
        Add("ammoclip","弹匣容量","Ammo clip size","N0");
        Add("ammomax","最大弹药量","Maximum reserve ammunition","N0");
        var damage=new[]{("kinwgt","动能"),("thmwgt","热能"),("expwgt","爆炸"),("abswgt","绝对"),("cauwgt","腐蚀"),("axewgt","反异种")}
            .Where(t=>values.GetValueOrDefault(t.Item1)>0).Select(t=>t.Item2).ToArray();
        if(damage.Length>0)rows.Add(new("伤害类型","Damage type",string.Join(" / ",damage)));
        Add("dmgfall","伤害衰减起始距离","Damage falloff start","N0"," m");
        Add("fsdoptmass","最佳质量","FSD optimal mass","N1"," t");
        Add("maxfuel","每跳最大燃料","Maximum fuel per jump","N2"," t");
        Add("scooprate","最大采集速率","Maximum scoop rate","N3"," t/s");
        Add("fuelcap","燃料容量","Fuel capacity","N0"," t");
        Add("cargocap","货物容量","Cargo capacity","N0"," t");
        Add("engoptmass","最佳质量","Thruster optimal mass","N1"," t");
        foreach(var (key,name) in new[]{("sys","系统"),("eng","引擎"),("wep","武器")})
        {
            Add(key+"cap",name+"电容容量",key.ToUpperInvariant()+" capacity","N2"," MJ");
            Add(key+"chg",name+"充能速率",key.ToUpperInvariant()+" recharge","N2"," MW");
        }
        return rows;
    }
    public static IReadOnlyList<ShipStatusValue> Ship(EquipmentStatistics? stats,string source)
    {
        string Value(string key,string format,string unit="")=>stats?.Value(key) is {} v?v.ToString(format,CultureInfo.InvariantCulture)+unit:"—";
        return [
            new("speedSpec","极速 / 加力(满燃料参考)","Speed / boost · full fuel",$"{Value("_speed","N0","")} / {Value("_boost","N0"," m/s")}",source),
            new("jumpSpec","跃迁距离 最小 / 空载 / 最大","Jump range · laden / unladen / maximum",$"{Value("_jump_laden","F2","")} / {Value("_jump_unladen","F2","")} / {Value("_jump_max","F2"," ly")}",source),
            new("massSpec","空载质量","Unladen mass",Value("mass","N2"," t"),source),
            new("shieldSpec","护盾强度(装配计算)","Shield strength",Value("_shields","N0"," MJ"),source),
            new("hullSpec","装甲强度(装配计算)","Hull strength",Value("_armour","N0"),source),
            new("dpsSpec","武器每秒伤害(装配计算)","Weapon damage per second",Value("dps","N1"," /s"),source)
        ];
    }
}