OSDN Git Service

ダメコンの発動が戦闘結果の計算に反映されないことがあるのを直す
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 24 Mar 2018 11:24:02 +0000 (20:24 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 24 Mar 2018 11:29:54 +0000 (20:29 +0900)
KancolleSniffer.Test/BattleTest.cs
KancolleSniffer.Test/logs
KancolleSniffer/BattleInfo.cs

index e9e0c19..a778fbf 100644 (file)
@@ -113,5 +113,20 @@ namespace KancolleSniffer.Test
             _battleInfo.InspectBattleResult(Data(logs[6]));\r
             PAssert.That(() => !_battleInfo.DisplayedResultRank.IsError);\r
         }\r
+\r
+        /// <summary>\r
+        /// 機動対敵連合の雷撃戦でダメコンが発動する\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void TreiggerDameconInCombinedBattle()\r
+        {\r
+            var logs = ReadAllLines("damecon_002");\r
+            var battle = Data(logs[3]);\r
+            _shipInfo.InjectShips(battle, JsonParser.Parse(logs[0]));\r
+            _battleInfo.InspectBattle(logs[1], logs[2], battle);\r
+            _battleInfo.InspectBattle(logs[4], logs[5], Data(logs[6]));\r
+            _battleInfo.InspectBattleResult(Data(logs[9]));\r
+            PAssert.That(() => !_battleInfo.DisplayedResultRank.IsError);\r
+        }\r
     }\r
 }
\ No newline at end of file
index f928f55..94f121e 160000 (submodule)
@@ -1 +1 @@
-Subproject commit f928f55f2d3299e981e25b57426f46b8f4c2b7a0
+Subproject commit 94f121ea3ba75db7d87910efa59d9146fb8255e0
index 8f9d53f..449a550 100644 (file)
@@ -255,83 +255,71 @@ namespace KancolleSniffer
             return result;\r
         }\r
 \r
-        private enum CombatType\r
-        {\r
-            AtOnce,\r
-            ByTurn,\r
-            Support,\r
-            Aircraft,\r
-            AirBase,\r
-            Friend\r
-        }\r
-\r
-        private class Phase\r
-        {\r
-            public string Api { get; }\r
-            public CombatType Type { get; }\r
-            public string Name { get; }\r
-\r
-            public Phase(string api, CombatType type, string name = "")\r
-            {\r
-                Api = api;\r
-                Type = type;\r
-                Name = name;\r
-            }\r
-        }\r
-\r
         private void CalcDamage(dynamic json)\r
         {\r
             AirBattleResults.Clear();\r
-            var phases = new[]\r
+            foreach (KeyValuePair<string, dynamic> kv in json)\r
             {\r
-                new Phase("air_base_injection", CombatType.Aircraft, "AB噴式"),\r
-                new Phase("injection_kouku", CombatType.Aircraft, "噴式"),\r
-                new Phase("air_base_attack", CombatType.AirBase),\r
-                new Phase("n_support_info", CombatType.Support),\r
-                new Phase("n_hougeki1", CombatType.ByTurn),\r
-                new Phase("n_hougeki2", CombatType.ByTurn),\r
-                new Phase("kouku", CombatType.Aircraft, "航空戦"),\r
-                new Phase("kouku2", CombatType.Aircraft, "航空戦2"),\r
-                new Phase("support_info", CombatType.Support),\r
-                new Phase("opening_taisen", CombatType.ByTurn),\r
-                new Phase("opening_atack", CombatType.AtOnce),\r
-                new Phase("friendly_battle", CombatType.Friend),\r
-                new Phase("hougeki", CombatType.ByTurn),\r
-                new Phase("hougeki1", CombatType.ByTurn),\r
-                new Phase("hougeki2", CombatType.ByTurn),\r
-                new Phase("hougeki3", CombatType.ByTurn),\r
-                new Phase("raigeki", CombatType.AtOnce)\r
-            };\r
-            foreach (var phase in phases)\r
-                CalcDamageByType(json, phase);\r
-        }\r
-\r
-        private void CalcDamageByType(dynamic json, Phase phase)\r
-        {\r
-            var api = "api_" + phase.Api;\r
-            if (!json.IsDefined(api) || json[api] == null)\r
-                return;\r
-            switch (phase.Type)\r
-            {\r
-                case CombatType.AtOnce:\r
-                    CalcDamageAtOnce(json[api]);\r
-                    break;\r
-                case CombatType.ByTurn:\r
-                    CalcDamageByTurn(json[api]);\r
-                    break;\r
-                case CombatType.Support:\r
-                    CalcSupportDamage(json[api]);\r
-                    break;\r
-                case CombatType.Aircraft:\r
-                    AddAirBattleResult(json[api], phase.Name);\r
-                    CalcKoukuDamage(json[api]);\r
-                    break;\r
-                case CombatType.AirBase:\r
-                    CalcAirBaseAttackDamage(json[api]);\r
-                    break;\r
-                case CombatType.Friend:\r
-                    CalcFriendAttackDamage(json[api]);\r
-                    break;\r
+                if (kv.Value == null)\r
+                    continue;\r
+                switch (kv.Key)\r
+                {\r
+                    case "api_air_base_injection":\r
+                        AddAirBattleResult(kv.Value, "AB噴式");\r
+                        CalcKoukuDamage(kv.Value);\r
+                        break;\r
+                    case "api_injection_kouku":\r
+                        AddAirBattleResult(kv.Value, "噴式");\r
+                        CalcKoukuDamage(kv.Value);\r
+                        break;\r
+                    case "api_air_base_attack":\r
+                        CalcAirBaseAttackDamage(kv.Value);\r
+                        break;\r
+                    case "api_n_support_info":\r
+                        CalcSupportDamage(kv.Value);\r
+                        break;\r
+                    case "api_n_hougeki1":\r
+                        CalcDamageByTurn(kv.Value);\r
+                        break;\r
+                    case "api_n_hougeki2":\r
+                        CalcDamageByTurn(kv.Value);\r
+                        break;\r
+                    case "api_kouku":\r
+                        AddAirBattleResult(kv.Value, "航空戦");\r
+                        CalcKoukuDamage(kv.Value);\r
+                        break;\r
+                    case "api_kouku2":\r
+                        AddAirBattleResult(kv.Value, "航空戦2");\r
+                        CalcKoukuDamage(kv.Value);\r
+                        break;\r
+                    case "api_support_info":\r
+                        CalcSupportDamage(kv.Value);\r
+                        break;\r
+                    case "api_opening_taisen":\r
+                        CalcDamageByTurn(kv.Value);\r
+                        break;\r
+                    case "api_opening_atack":\r
+                        CalcDamageAtOnce(kv.Value);\r
+                        break;\r
+                    case "api_friendly_battle":\r
+                        CalcFriendAttackDamage(kv.Value);\r
+                        break;\r
+                    case "api_hougeki":\r
+                        CalcDamageByTurn(kv.Value);\r
+                        break;\r
+                    case "api_hougeki1":\r
+                        CalcDamageByTurn(kv.Value);\r
+                        break;\r
+                    case "api_hougeki2":\r
+                        CalcDamageByTurn(kv.Value);\r
+                        break;\r
+                    case "api_hougeki3":\r
+                        CalcDamageByTurn(kv.Value);\r
+                        break;\r
+                    case "api_raigeki":\r
+                        CalcDamageAtOnce(kv.Value);\r
+                        break;\r
+                }\r
             }\r
         }\r
 \r
@@ -692,11 +680,12 @@ namespace KancolleSniffer
         /// <summary>\r
         /// テスト専用\r
         /// </summary>\r
-        public void InjectResultStatus(ShipStatus[] main, ShipStatus[] guard, ShipStatus[] enemy, ShipStatus[] enemyGuard)\r
+        public void InjectResultStatus(ShipStatus[] main, ShipStatus[] guard, ShipStatus[] enemy,\r
+            ShipStatus[] enemyGuard)\r
         {\r
             Result = new BattleResult\r
             {\r
-                Friend = new BattleResult.Combined { Main = main, Guard = guard},\r
+                Friend = new BattleResult.Combined {Main = main, Guard = guard},\r
                 Enemy = new BattleResult.Combined {Main = enemy, Guard = enemyGuard}\r
             };\r
         }\r