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)
];
}
}
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)
];
}
}