{\r
var sniffer = new Sniffer {UseOldEnemyId = true};\r
SniffLogFile(sniffer, "battle_006");\r
- PAssert.That(() => sniffer.Battle.EnemyFighterPower == "0");\r
+ PAssert.That(() => sniffer.Battle.EnemyFighterPower.AirCombat == 0);\r
}\r
\r
/// <summary>\r
{\r
var sniffer1 = new Sniffer{UseOldEnemyId = true};\r
SniffLogFile(sniffer1, "airbattle_002");\r
- PAssert.That(() => sniffer1.Battle.EnemyFighterPower == "28");\r
+ PAssert.That(() => sniffer1.Battle.EnemyFighterPower.AirCombat == 28);\r
\r
var sniffer2 = new Sniffer {UseOldEnemyId = true};\r
SniffLogFile(sniffer2, "both_combined_001");\r
- PAssert.That(() => sniffer2.Battle.EnemyFighterPower == "389");\r
+ PAssert.That(() => sniffer2.Battle.EnemyFighterPower.AirCombat == 389);\r
}\r
\r
/// <summary>\r
Result\r
}\r
\r
+ public class EnemyFighterPower\r
+ {\r
+ public bool HasUnknown { get; set; }\r
+ public string UnknownMark => HasUnknown ? "+" : "";\r
+ public int AirCombat { get; set; }\r
+ public int Interception { get; set; }\r
+ }\r
+\r
public class BattleInfo\r
{\r
private readonly ShipInfo _shipInfo;\r
\r
public BattleState BattleState { get; set; }\r
public string Formation { get; private set; }\r
- public string EnemyFighterPower { get; private set; }\r
+ public EnemyFighterPower EnemyFighterPower { get; private set; }\r
public int AirControlLevel { get; private set; }\r
public BattleResultRank ResultRank { get; private set; }\r
public ShipStatus[] EnemyResultStatus { get; private set; }\r
return (int)stage1.api_disp_seiku;\r
}\r
\r
- private string CalcEnemyFighterPower(dynamic json)\r
+ private EnemyFighterPower CalcEnemyFighterPower(dynamic json)\r
{\r
- var missing = "";\r
+ var result = new EnemyFighterPower();\r
var ships = ((int[])json.api_ship_ke).Skip(1);\r
if (json.api_ship_ke_combined() && _guard.Length > 0)\r
ships = ships.Concat(((int[])json.api_ship_ke_combined).Skip(1));\r
var r = _shipInfo.GetSpec(id).MaxEq;\r
if (r != null)\r
return r;\r
- missing = "+";\r
+ result.HasUnknown = true;\r
return new int[5];\r
});\r
var equips = ((int[][])json.api_eSlot).SelectMany(x => x);\r
if (json.api_eSlot_combined() && _guard.Length > 0)\r
equips = equips.Concat(((int[][])json.api_eSlot_combined).SelectMany(x => x));\r
- return (from slot in equips.Zip(maxEq, (id, max) => new {id, max})\r
- let spec = _itemInfo.GetSpecByItemId(slot.id)\r
- where spec.CanAirCombat\r
- select (int)Floor(spec.AntiAir * Sqrt(slot.max))).DefaultIfEmpty()\r
- .Sum() + missing;\r
+ foreach (var entry in from slot in equips.Zip(maxEq, (id, max) => new { id, max })\r
+ let spec = _itemInfo.GetSpecByItemId(slot.id)\r
+ let perSlot = (int)Floor(spec.AntiAir * Sqrt(slot.max))\r
+ select new { spec, perSlot })\r
+ {\r
+ if (entry.spec.CanAirCombat)\r
+ result.AirCombat += entry.perSlot;\r
+ if (entry.spec.IsAircraft)\r
+ result.Interception += entry.perSlot;\r
+ }\r
+ return result;\r
}\r
\r
private void CalcDamage(dynamic json, bool surfaceFleet = false)\r
dropType, dropName,\r
string.Join(",", fships),\r
string.Join(",", eships),\r
- fpower, _battleInfo.EnemyFighterPower,\r
+ fpower, _battleInfo.EnemyFighterPower.AirCombat + _battleInfo.EnemyFighterPower.UnknownMark,\r
AirControlLevelName(_battle)),\r
"日付,海域,マス,ボス,ランク,艦隊行動,味方陣形,敵陣形,敵艦隊,ドロップ艦種,ドロップ艦娘," +\r
"味方艦1,味方艦1HP,味方艦2,味方艦2HP,味方艦3,味方艦3HP,味方艦4,味方艦4HP,味方艦5,味方艦5HP,味方艦6,味方艦6HP," +\r
this.panelCombinedFleet = new System.Windows.Forms.Panel();\r
this.panelBattleInfo = new System.Windows.Forms.Panel();\r
this.labelEnemyFighterPower = new System.Windows.Forms.Label();\r
- this.label30 = new System.Windows.Forms.Label();\r
+ this.labelEnemyFighterPowerCaption = new System.Windows.Forms.Label();\r
this.labelFormation = new System.Windows.Forms.Label();\r
this.labelResultRank = new System.Windows.Forms.Label();\r
this.labelLoS = new System.Windows.Forms.Label();\r
// panelBattleInfo\r
// \r
this.panelBattleInfo.Controls.Add(this.labelEnemyFighterPower);\r
- this.panelBattleInfo.Controls.Add(this.label30);\r
+ this.panelBattleInfo.Controls.Add(this.labelEnemyFighterPowerCaption);\r
this.panelBattleInfo.Controls.Add(this.labelFormation);\r
this.panelBattleInfo.Controls.Add(this.labelResultRank);\r
this.panelBattleInfo.Location = new System.Drawing.Point(59, 116);\r
this.labelEnemyFighterPower.TabIndex = 3;\r
this.labelEnemyFighterPower.TextAlign = System.Drawing.ContentAlignment.MiddleRight;\r
// \r
- // label30\r
+ // labelEnemyFighterPowerCaption\r
// \r
- this.label30.AutoSize = true;\r
- this.label30.Location = new System.Drawing.Point(90, 1);\r
- this.label30.Name = "label30";\r
- this.label30.Size = new System.Drawing.Size(41, 12);\r
- this.label30.TabIndex = 2;\r
- this.label30.Text = "敵制空";\r
+ this.labelEnemyFighterPowerCaption.AutoSize = true;\r
+ this.labelEnemyFighterPowerCaption.Location = new System.Drawing.Point(90, 1);\r
+ this.labelEnemyFighterPowerCaption.Name = "labelEnemyFighterPowerCaption";\r
+ this.labelEnemyFighterPowerCaption.Size = new System.Drawing.Size(41, 12);\r
+ this.labelEnemyFighterPowerCaption.TabIndex = 2;\r
+ this.labelEnemyFighterPowerCaption.Text = "敵制空";\r
// \r
// labelFormation\r
// \r
private System.Windows.Forms.Label labelPlayLog;\r
private System.Windows.Forms.Panel panelBattleInfo;\r
private System.Windows.Forms.Label labelEnemyFighterPower;\r
- private System.Windows.Forms.Label label30;\r
+ private System.Windows.Forms.Label labelEnemyFighterPowerCaption;\r
private System.Windows.Forms.Label labelFormation;\r
private System.Windows.Forms.Label labelResultRank;\r
private System.Windows.Forms.ImageList imageListFuelSq;\r
private void UpdateBattleFighterPower()\r
{\r
var battle = _sniffer.Battle;\r
- labelEnemyFighterPower.Text = battle.EnemyFighterPower;\r
+ var power = battle.EnemyFighterPower;\r
+ labelEnemyFighterPower.Text = power.AirCombat + power.UnknownMark;\r
+ if (power.AirCombat != power.Interception)\r
+ {\r
+ var text = "防空: " + power.Interception + power.UnknownMark;\r
+ toolTipFighterPower.SetToolTip(labelEnemyFighterPower, text);\r
+ toolTipFighterPower.SetToolTip(labelEnemyFighterPowerCaption, text);\r
+ }\r
UpdateFighterPower(_sniffer.CombinedFleetType > 0 && battle.EnemyIsCombined);\r
var color = new[]\r
{DefaultForeColor, DefaultForeColor, Color.FromArgb(0, 90, 255), Color.Green, Color.Orange, Color.Red};\r