public void FighterPowerOfBaseAirCorps()\r
{\r
var sniffer = new Sniffer();\r
- SniffLogFile(sniffer, "fighterpower_004");\r
+ SniffLogFile(sniffer, "baseaircorps_001");\r
PAssert.That(() => sniffer.BaseAirCorps[0].AirCorps[0].FighterPower[1] == 301);\r
sniffer.BaseAirCorps[0].AirCorps[0].Action = 2; // 防空\r
PAssert.That(()=>sniffer.BaseAirCorps[0].AirCorps[0].FighterPower[1] == 320);\r
}\r
\r
/// <summary>\r
+ /// 基地航空隊の防空時の偵察機補正を含む制空値を計算する\r
+ /// </summary>\r
+ [TestMethod]\r
+ public void FighterPowerWithReconBonus()\r
+ {\r
+ var sniffer = new Sniffer();\r
+ SniffLogFile(sniffer, "baseaircorps_002");\r
+ PAssert.That(() => sniffer.BaseAirCorps[0].AirCorps[2].FighterPower[0] == 349);\r
+ }\r
+\r
+ /// <summary>\r
/// マップ索敵の判定式(33)を正しく計算する\r
/// </summary>\r
[TestMethod]\r
}\r
}\r
\r
- public int[] FighterPower => Planes.Aggregate(new[] {0, 0}, (prev, plane) =>\r
+ public int[] FighterPower\r
{\r
- if (plane.State != 1)\r
- return prev;\r
- var slot = plane.Slot;\r
- var intercepterBonus = Action == 2\r
- ? slot.Spec.AntiBomber * 2 + slot.Spec.Interception\r
- : slot.Spec.Interception * 1.5;\r
- var unskilled = (slot.Spec.AntiAir + intercepterBonus + slot.FighterPowerLevelBonus) * Sqrt(plane.Count);\r
- return new[]\r
+ get\r
{\r
- prev[0] + (int)(unskilled + slot.AlvBonus[0]),\r
- prev[1] + (int)(unskilled + slot.AlvBonus[1])\r
- };\r
- });\r
+ var airDefenceBonus = Action == 2\r
+ ? Planes.Select(plane => plane.Slot.Spec.AirDefenceBonus).Max()\r
+ : 1.0;\r
+ var fighterPower = Planes.Aggregate(new[] {0, 0}, (prev, plane) =>\r
+ {\r
+ if (plane.State != 1)\r
+ return prev;\r
+ var slot = plane.Slot;\r
+ var intercepterBonus = Action == 2\r
+ ? slot.Spec.AntiBomber * 2 + slot.Spec.Interception\r
+ : slot.Spec.Interception * 1.5;\r
+ var unskilled = (slot.Spec.AntiAir + intercepterBonus + slot.FighterPowerLevelBonus) *\r
+ Sqrt(plane.Count);\r
+ return new[]\r
+ {\r
+ prev[0] + (int)(unskilled + slot.AlvBonus[0]),\r
+ prev[1] + (int)(unskilled + slot.AlvBonus[1])\r
+ };\r
+ });\r
+ return new[]\r
+ {\r
+ (int)(fighterPower[0] * airDefenceBonus),\r
+ (int)(fighterPower[1] * airDefenceBonus)\r
+ };\r
+ }\r
+ }\r
}\r
\r
public class PlaneInfo\r