OSDN Git Service

航空戦の結果に対空カットインの情報を加える
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Wed, 24 Jan 2018 11:24:19 +0000 (20:24 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 27 Jan 2018 08:34:04 +0000 (17:34 +0900)
KancolleSniffer/AirBattleResultPanel.cs
KancolleSniffer/BattleInfo.cs
KancolleSniffer/ShipLabels.cs

index 9baa0a4..6a445f7 100644 (file)
@@ -32,10 +32,18 @@ namespace KancolleSniffer
             public int EnemyLost { get; set; }\r
         }\r
 \r
+        public class AirFireResult\r
+        {\r
+            public string ShipName { get; set; }\r
+            public int Kind { get; set; }\r
+            public string[] Items { get; set; }\r
+        }\r
+\r
         public string PhaseName { get; set; }\r
         public int AirControlLevel { get; set; }\r
-        public StageResult Stage1 { get; set; } = new StageResult();\r
-        public StageResult Stage2 { get; set; } = new StageResult();\r
+        public StageResult Stage1 { get; set;  }\r
+        public StageResult Stage2 { get; set;  }\r
+        public AirFireResult AirFire { get; set; }\r
     }\r
 \r
     [DesignerCategory("Code")]\r
@@ -46,6 +54,9 @@ namespace KancolleSniffer
         private readonly Label[][][] _resultLabels = new Label[2][][];\r
         private AirBattleResult[] _resultList;\r
         private int _resultIndex;\r
+        private readonly ShipLabel _ciShipName;\r
+        private readonly Label _ciKind;\r
+        private readonly ToolTip _toolTip = new ToolTip{ShowAlways = true};\r
 \r
         public bool ShowResultAutomatic { get; set; }\r
 \r
@@ -57,6 +68,7 @@ namespace KancolleSniffer
         public AirBattleResultPanel()\r
         {\r
             const int top = 20;\r
+            const int ci = 168;\r
             var labels = new[]\r
             {\r
                 _phaseName =\r
@@ -70,7 +82,8 @@ namespace KancolleSniffer
                 _stage1 = new Label {Text = "stage1", Location = new Point(8, top), AutoSize = true},\r
                 new Label {Text = "stage2", Location = new Point(8, top + 14), AutoSize = true},\r
                 new Label {Text = "自軍", Location = new Point(67, 6), AutoSize = true},\r
-                new Label {Text = "敵軍", Location = new Point(122, 6), AutoSize = true}\r
+                new Label {Text = "敵軍", Location = new Point(122, 6), AutoSize = true},\r
+                new Label {Text = "CI", Location = new Point(ci, 4), AutoSize = true}\r
             };\r
             Controls.AddRange(labels);\r
             const int left = 53;\r
@@ -101,6 +114,16 @@ namespace KancolleSniffer
                     });\r
                 }\r
             }\r
+            Controls.Add(_ciShipName = new ShipLabel\r
+            {\r
+                Location = new Point(ci, top),\r
+                Size = new Size((int)ShipNameWidth.CiShipName, 12)\r
+            });\r
+            Controls.Add(_ciKind = new Label\r
+            {\r
+                Location = new Point(ci, top + 14),\r
+                Size = new Size(24, 12)\r
+            });\r
             _phaseName.Click += PhaseNameOnClick;\r
         }\r
 \r
@@ -153,6 +176,24 @@ namespace KancolleSniffer
                 labels[1][0].Text = $"{stage.EnemyCount}";\r
                 labels[1][1].Text = $"{stage.EnemyCount - stage.EnemyLost}";\r
             }\r
+            ShowAirFireResult();\r
+        }\r
+\r
+        private void ShowAirFireResult()\r
+        {\r
+            var result = _resultList[_resultIndex];\r
+            if (result.AirFire == null)\r
+            {\r
+                _ciShipName.SetName(null);\r
+                _ciKind.Text = "";\r
+                _toolTip.SetToolTip(_ciKind, "");\r
+            }\r
+            else\r
+            {\r
+                _ciShipName.SetName(result.AirFire.ShipName, ShipNameWidth.CiShipName);\r
+                _ciKind.Text = result.AirFire.Kind.ToString();\r
+                _toolTip.SetToolTip(_ciKind, string.Join("\r\n", result.AirFire.Items));\r
+            }\r
         }\r
 \r
         private void ClearResult()\r
@@ -169,6 +210,9 @@ namespace KancolleSniffer
                     }\r
                 }\r
             }\r
+            _ciShipName.SetName(null);\r
+            _ciKind.Text = "";\r
+            _toolTip.SetToolTip(_ciKind, "");\r
         }\r
     }\r
 }
\ No newline at end of file
index 5e9739c..04dddc4 100644 (file)
@@ -357,7 +357,7 @@ namespace KancolleSniffer
             var stage1 = json.api_stage1;\r
             if (stage1 == null || (stage1.api_f_count == 0 && stage1.api_e_count == 0))\r
                 return;\r
-            AirBattleResults.Add(new AirBattleResult\r
+            var result = new AirBattleResult\r
             {\r
                 PhaseName = phaseName,\r
                 AirControlLevel = json.api_stage1.api_disp_seiku() ? (int)json.api_stage1.api_disp_seiku : 0,\r
@@ -383,7 +383,19 @@ namespace KancolleSniffer
                         EnemyCount = (int)json.api_stage2.api_e_count,\r
                         EnemyLost = (int)json.api_stage2.api_e_lostcount\r
                     }\r
-            });\r
+            };\r
+            if (json.api_stage2 != null && json.api_stage2.api_air_fire())\r
+            {\r
+                var airfire = json.api_stage2.api_air_fire;\r
+                var idx = (int)airfire.api_idx;\r
+                result.AirFire = new AirBattleResult.AirFireResult\r
+                {\r
+                    ShipName = idx < _friend.Length ? _friend[idx].Name : _guard[idx - 6].Name,\r
+                    Kind = (int)airfire.api_kind,\r
+                    Items = ((int[])airfire.api_use_items).Select(id => _itemInfo.GetSpecByItemId(id).Name).ToArray()\r
+                };\r
+            }\r
+            AirBattleResults.Add(result);\r
         }\r
 \r
         private void CalcKoukuDamage(dynamic json)\r
@@ -538,7 +550,8 @@ namespace KancolleSniffer
             public int NowHp => _status.NowHp;\r
             public bool Escaped => _status.Escaped;\r
             public ShipStatus.Damage DamageLevel => _status.DamageLevel;\r
-            public int StartHp;\r
+            public string Name => _status.Name;\r
+            public int StartHp { get; private set; }\r
 \r
             public static Record[] Setup(ShipStatus[] ships, bool practice) =>\r
             (from s in ships\r
index 6624224..b512b40 100644 (file)
@@ -34,6 +34,7 @@ namespace KancolleSniffer
         GroupConfig = 82,\r
         Combined = 54,\r
         BattleResult = 65,\r
+        CiShipName = 65,\r
         Max = int.MaxValue\r
     }\r
 \r