OSDN Git Service

敵味方どちらかが6隻未満だと海戦ログが正しく出力されないのを直す
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Fri, 16 Aug 2019 12:29:58 +0000 (21:29 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Fri, 16 Aug 2019 12:29:58 +0000 (21:29 +0900)
KancolleSniffer.Test/LoggerTest.cs
KancolleSniffer.Test/logs
KancolleSniffer/Log/BattleLogger.cs

index b040f32..1c3f0ac 100644 (file)
@@ -157,6 +157,23 @@ namespace KancolleSniffer.Test
         }\r
 \r
         /// <summary>\r
+        /// 6隻未満の場合\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void InspectShip2BattleResult()\r
+        {\r
+            var sniffer = new Sniffer();\r
+            var result = "";\r
+            sniffer.SetLogWriter((path, s, h) => { result += s + "|"; }, () => new DateTime(2019, 1, 1));\r
+            sniffer.EnableLog(LogType.Battle);\r
+            SnifferTest.SniffLogFile(sniffer, "battle_003");\r
+            Assert.IsFalse(sniffer.IsBattleResultError);\r
+            Assert.AreEqual("2019-01-01 00:00:00,鎮守府正面海域,1,出撃,S,反航戦,単縦陣,単縦陣,敵偵察艦,駆逐艦,睦月," +\r
+                            "早波改(Lv54),32/32,五月雨(Lv20),16/16,,,,,,,,,駆逐ハ級,0/24,,,,,,,,,,,0,0,,1-1|",\r
+                result);\r
+        }\r
+\r
+        /// <summary>\r
         /// 基地空襲戦\r
         /// </summary>\r
         [TestMethod]\r
@@ -168,7 +185,7 @@ namespace KancolleSniffer.Test
             sniffer.EnableLog(LogType.Battle);\r
             SnifferTest.SniffLogFile(sniffer, "airraid_battle_001");\r
             Assert.AreEqual("2019-01-01 00:00:00,アリューシャン列島沖,12,出撃,S,同航戦,単縦陣,輪形陣,,,," +\r
-                            "基地航空隊1(Lv0),200/200,基地航空隊2(Lv0),200/200,基地航空隊3(Lv0),200/200," +\r
+                            "基地航空隊1(Lv0),200/200,基地航空隊2(Lv0),200/200,基地航空隊3(Lv0),200/200,,,,,,," +\r
                             "北方棲妹,790/790,砲台小鬼,130/130,砲台小鬼,130/130,飛行場姫,500/500,飛行場姫,500/500,集積地棲姫,600/600,425~426,231,航空優勢,44-3|",\r
                 result);\r
         }\r
index cab4a46..0a694f9 160000 (submodule)
@@ -1 +1 @@
-Subproject commit cab4a4669f6feaf536cbf84dd8e74ba640165c06
+Subproject commit 0a694f9bcc7947a79a66b7ea44400d32bcb93500
index 2cf15ae..d46f60b 100644 (file)
@@ -93,8 +93,8 @@ namespace KancolleSniffer.Log
 \r
         private string CreateLog(dynamic result)\r
         {\r
-            var fShips = GenerateFriendShipList();\r
-            var eShips = GenerateEnemyShipList();\r
+            var fShips = GenerateShipList(_battleInfo.Result.Friend, s => $"{s.Name}(Lv{s.Level})");\r
+            var eShips = GenerateShipList(_battleInfo.Result.Enemy, s => $"{s.Name}");\r
             var boss = "";\r
             if (_cell.Start)\r
                 boss = "出撃";\r
@@ -143,13 +143,13 @@ namespace KancolleSniffer.Log
             return name == "" ? itemName : name + "+" + itemName;\r
         }\r
 \r
-        private IEnumerable<string> GenerateFriendShipList()\r
+        private static IEnumerable<string> GenerateShipList(BattleInfo.BattleResult.Combined fleet,\r
+            Func<ShipStatus, string> toName)\r
         {\r
-            if (_battleInfo.Result.Friend.Guard.Length > 0)\r
+            fleet = FillEmpty(fleet);\r
+            if (fleet.Guard.Length > 0)\r
             {\r
-                var mainShips = _battleInfo.Result.Friend.Main;\r
-                var guardShips = _battleInfo.Result.Friend.Guard;\r
-                return mainShips.Zip(guardShips, (main, guard) =>\r
+                return fleet.Main.Zip(fleet.Guard, (main, guard) =>\r
                 {\r
                     if (main.Empty && guard.Empty)\r
                         return ",";\r
@@ -157,75 +157,58 @@ namespace KancolleSniffer.Log
                     var hp = "";\r
                     if (!main.Empty)\r
                     {\r
-                        name = $"{main.Name}(Lv{main.Level})";\r
+                        name = toName(main);\r
                         hp = $"{main.NowHp}/{main.MaxHp}";\r
                     }\r
                     name += "・";\r
                     hp += "・";\r
                     if (!guard.Empty)\r
                     {\r
-                        name += $"{guard.Name}(Lv{guard.Level})";\r
+                        name += toName(guard);\r
                         hp += $"{guard.NowHp}/{guard.MaxHp}";\r
                     }\r
                     return name + "," + hp;\r
                 }).ToList();\r
             }\r
-            var ships = _battleInfo.Result.Friend.Main;\r
-            if (ships.Length > 6)\r
+            var ships = fleet.Main;\r
+            if (fleet.Main.Length > 6)\r
             {\r
                 var result = new List<string>();\r
                 for (var i = 0; i < 12 - ships.Length; i++)\r
                 {\r
-                    var ship = ships[i];\r
-                    result.Add($"{ship.Name}(Lv{ship.Level}),{ship.NowHp}/{ship.MaxHp}");\r
+                    var ship = fleet.Main[i];\r
+                    result.Add($"{toName(ship)},{ship.NowHp}/{ship.MaxHp}");\r
                 }\r
                 for (var i = 0; i < ships.Length - 6; i++)\r
                 {\r
                     var s1 = ships[12 - ships.Length + i];\r
                     var s2 = ships[6 + i];\r
                     result.Add(\r
-                        $"{s1.Name}(Lv{s1.Level})・{s2.Name}(Lv{s2.Level})," +\r
+                        $"{toName(s1)}・{toName(s2)}," +\r
                         $"{s1.NowHp}/{s1.MaxHp}・{s2.NowHp}/{s2.MaxHp}");\r
                 }\r
                 return result;\r
             }\r
-            return ships.Select(ship =>\r
-            {\r
-                if (ship.Empty)\r
-                    return ",";\r
-                return $"{ship.Name}(Lv{ship.Level}),{ship.NowHp}/{ship.MaxHp}";\r
-            }).ToList();\r
+            return ships.Select(ship => ship.Empty ? "," : $"{toName(ship)},{ship.NowHp}/{ship.MaxHp}");\r
         }\r
 \r
-        private IEnumerable<string> GenerateEnemyShipList()\r
+        private static BattleInfo.BattleResult.Combined FillEmpty(BattleInfo.BattleResult.Combined fleet)\r
         {\r
-            var result = _battleInfo.Result.Enemy.Main.Concat(Enumerable.Repeat(new ShipStatus(), 6)).Take(6);\r
-            if (_battleInfo.Result.Enemy.Guard.Length == 0)\r
-            {\r
-                return result.Select(s => s.Empty ? "," : $"{s.Name},{s.NowHp}/{s.MaxHp}").ToList();\r
-            }\r
-            var mainShips = result;\r
-            var guardShips = _battleInfo.Result.Enemy.Guard.Concat(Enumerable.Repeat(new ShipStatus(), 6)).Take(6);\r
-            return mainShips.Zip(guardShips, (main, guard) =>\r
+            return new BattleInfo.BattleResult.Combined\r
             {\r
-                if (main.Empty && guard.Empty)\r
-                    return ",";\r
-                var name = "";\r
-                var hp = "";\r
-                if (!main.Empty)\r
-                {\r
-                    name = $"{main.Name}";\r
-                    hp = $"{main.NowHp}/{main.MaxHp}";\r
-                }\r
-                name += "・";\r
-                hp += "・";\r
-                if (!guard.Empty)\r
-                {\r
-                    name += $"{guard.Name}";\r
-                    hp += $"{guard.NowHp}/{guard.MaxHp}";\r
-                }\r
-                return name + "," + hp;\r
-            }).ToList();\r
+                Main = FillEmpty(fleet.Main),\r
+                Guard = FillEmpty(fleet.Guard)\r
+            };\r
+        }\r
+\r
+        private static readonly ShipStatus[] Padding =\r
+            Enumerable.Repeat(new ShipStatus(), ShipInfo.MemberCount).ToArray();\r
+\r
+        private static ShipStatus[] FillEmpty(ShipStatus[] ships)\r
+        {\r
+            return ships.Length > ShipInfo.MemberCount || ships.Length == 0\r
+                ? ships\r
+                : ships.Concat(Padding).Take(ShipInfo.MemberCount).ToArray();\r
         }\r
 \r
         private string FormationName(dynamic f)\r