OSDN Git Service

基地航空隊戦における敵制空値をツールチップで表示する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Wed, 26 Apr 2017 14:57:23 +0000 (23:57 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Wed, 26 Apr 2017 14:57:23 +0000 (23:57 +0900)
KancolleSniffer.Test/SnifferTest.cs
KancolleSniffer/BattleInfo.cs
KancolleSniffer/Logger.cs
KancolleSniffer/MainForm.Designer.cs
KancolleSniffer/MainForm.cs

index 8ec69ef..5d088b2 100644 (file)
@@ -414,7 +414,7 @@ namespace KancolleSniffer.Test
         {\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
@@ -519,11 +519,11 @@ namespace KancolleSniffer.Test
         {\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
index 503e6d1..cff6c47 100644 (file)
@@ -37,6 +37,14 @@ namespace KancolleSniffer
         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
@@ -54,7 +62,7 @@ namespace KancolleSniffer
 \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
@@ -221,9 +229,9 @@ namespace KancolleSniffer
             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
@@ -232,17 +240,23 @@ namespace KancolleSniffer
                 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
index 1b6d7e8..9ac3fdf 100644 (file)
@@ -204,7 +204,7 @@ namespace KancolleSniffer
                 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
index 80ef50f..e45577e 100644 (file)
@@ -62,7 +62,7 @@ namespace KancolleSniffer
             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
@@ -344,7 +344,7 @@ namespace KancolleSniffer
             // 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
@@ -361,14 +361,14 @@ namespace KancolleSniffer
             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
@@ -1451,7 +1451,7 @@ namespace KancolleSniffer
         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
index 6c5387e..a69ec1c 100644 (file)
@@ -595,7 +595,14 @@ namespace KancolleSniffer
         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