OSDN Git Service

連合艦隊と通常の艦隊の損傷の計算を一つのメソッドにまとめる
authorKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Mon, 27 Apr 2015 10:36:55 +0000 (19:36 +0900)
committerKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Mon, 27 Apr 2015 10:36:55 +0000 (19:36 +0900)
KancolleSniffer/BattleInfo.cs

index b5f97b3..fc8374e 100644 (file)
@@ -151,24 +151,48 @@ namespace KancolleSniffer
                 select (int)Math.Floor(spec.AntiAir * Math.Sqrt(slot.max))).DefaultIfEmpty().Sum();\r
         }\r
 \r
-        private void CalcDamage(dynamic json)\r
+        private void CalcDamage(dynamic json, bool surfaceFleet = false)\r
         {\r
+            var combined = json.api_nowhps_combined();\r
             if (json.api_kouku.api_stage3 != null)\r
                 CalcSimpleDamage(json.api_kouku.api_stage3, _friendHp, _enemyHp);\r
-            if (json.api_kouku2() && json.api_kouku2.api_stage3 != null) // 航空戦2回目\r
-                CalcSimpleDamage(json.api_kouku2.api_stage3, _friendHp, _enemyHp);\r
+            if (json.api_kouku.api_stage3_combined() && json.api_kouku.api_stage3_combined != null)\r
+                CalcSimpleDamage(json.api_kouku.api_stage3_combined.api_fdam, _guardHp);\r
+            if (json.api_kouku2()) // 航空戦2回目\r
+            {\r
+                if (json.api_kouku2.api_stage3 != null)\r
+                    CalcSimpleDamage(json.api_kouku2.api_stage3, _friendHp, _enemyHp);\r
+                if (json.api_kouku2.api_stage3_combined() && json.api_kouku2.api_stage3_combined != null)\r
+                    CalcSimpleDamage(json.api_kouku2.api_stage3_combined.api_fdam, _guardHp);\r
+            }\r
             if (!json.api_opening_atack()) // 航空戦のみ\r
                 return;\r
             if (json.api_support_info() && json.api_support_info != null)\r
                 CalcSupportDamage(json.api_support_info);\r
             if (json.api_opening_atack != null)\r
-                CalcSimpleDamage(json.api_opening_atack, _friendHp, _enemyHp);\r
+            {\r
+                var friend = combined ? _guardHp : _friendHp; // 雷撃の対象は護衛\r
+                CalcSimpleDamage(json.api_opening_atack, friend, _enemyHp);\r
+            }\r
             if (json.api_hougeki1 != null)\r
-                CalcHougekiDamage(json.api_hougeki1, _friendHp, _enemyHp);\r
+            {\r
+                var friend = combined && !surfaceFleet ? _guardHp : _friendHp; // 空母機動部隊は一巡目が護衛\r
+                CalcHougekiDamage(json.api_hougeki1, friend, _enemyHp);\r
+            }\r
             if (json.api_hougeki2 != null)\r
+            {\r
                 CalcHougekiDamage(json.api_hougeki2, _friendHp, _enemyHp);\r
-            if (json.api_raigeki != null)\r
-                CalcSimpleDamage(json.api_raigeki, _friendHp, _enemyHp);\r
+            }\r
+            if (json.api_hougeki3() && json.api_hougeki3 != null)\r
+            {\r
+                var friend = combined && surfaceFleet ? _guardHp : _friendHp; // 水上打撃部隊は三順目が護衛\r
+                CalcHougekiDamage(json.api_hougeki3, friend, _enemyHp);\r
+            }\r
+            if (json.api_raigeki() && json.api_raigeki != null)\r
+            {\r
+                var friend = combined ? _guardHp : _friendHp;\r
+                CalcSimpleDamage(json.api_raigeki, friend, _enemyHp);\r
+            }\r
         }\r
 \r
         private void CalcSupportDamage(dynamic json)\r
@@ -285,16 +309,9 @@ namespace KancolleSniffer
             ShowResultCombined(false);\r
             SetupHp(json);\r
             if (IsNightBattle(json))\r
-            {\r
                 CalcHougekiDamage(json.api_hougeki, _guardHp, _enemyHp);\r
-            }\r
             else\r
-            {\r
-                if (surfaceFleet)\r
-                    CalcDamageCombinedFleetSurface(json);\r
-                else\r
-                    CalcDamageCombinedFleetAir(json);\r
-            }\r
+                CalcDamage(json, surfaceFleet);\r
             ClearOverKill(_friendHp);\r
             ClearOverKill(_guardHp);\r
             ClearOverKill(_enemyHp);\r
@@ -334,58 +351,6 @@ namespace KancolleSniffer
             UpdateDamgedShipNames(_shipInfo.GetShipStatuses(0).Concat(_shipInfo.GetShipStatuses(1)));\r
         }\r
 \r
-        private void CalcDamageCombinedFleetAir(dynamic json)\r
-        {\r
-            var kouku = json.api_kouku;\r
-            if (kouku.api_stage3 != null)\r
-                CalcSimpleDamage(kouku.api_stage3, _friendHp, _enemyHp);\r
-            if (kouku.api_stage3_combined != null)\r
-                CalcSimpleDamage(kouku.api_stage3_combined.api_fdam, _guardHp);\r
-            if (json.api_kouku2()) // 航空戦2回目\r
-            {\r
-                kouku = json.api_kouku2;\r
-                if (kouku.api_stage3 != null)\r
-                    CalcSimpleDamage(kouku.api_stage3, _friendHp, _enemyHp);\r
-                if (kouku.api_stage3_combined != null)\r
-                    CalcSimpleDamage(kouku.api_stage3_combined.api_fdam, _guardHp);\r
-            }\r
-            if (!json.api_opening_atack()) // 航空戦のみ\r
-                return;\r
-            if (json.api_support_info() && json.api_support_info != null)\r
-                CalcSupportDamage(json.api_support_info);\r
-            if (json.api_opening_atack != null)\r
-                CalcSimpleDamage(json.api_opening_atack.api_fdam, _guardHp);\r
-            if (json.api_hougeki1 != null)\r
-                CalcHougekiDamage(json.api_hougeki1, _guardHp, _enemyHp);\r
-            if (json.api_hougeki2() && json.api_hougeki2 != null)\r
-                CalcHougekiDamage(json.api_hougeki2, _friendHp, _enemyHp);\r
-            if (json.api_hougeki3() && json.api_hougeki3 != null)\r
-                CalcHougekiDamage(json.api_hougeki3, _friendHp, _enemyHp);\r
-            if (json.api_raigeki() && json.api_raigeki != null)\r
-                CalcSimpleDamage(json.api_raigeki, _guardHp, _enemyHp);\r
-        }\r
-\r
-        private void CalcDamageCombinedFleetSurface(dynamic json)\r
-        {\r
-            var kouku = json.api_kouku;\r
-            if (kouku.api_stage3 != null)\r
-                CalcSimpleDamage(kouku.api_stage3, _friendHp, _enemyHp);\r
-            if (kouku.api_stage3_combined != null)\r
-                CalcSimpleDamage(kouku.api_stage3_combined.api_fdam, _guardHp);\r
-            if (json.api_support_info() && json.api_support_info != null)\r
-                CalcSupportDamage(json.api_support_info);\r
-            if (json.api_opening_atack != null)\r
-                CalcSimpleDamage(json.api_opening_atack, _guardHp, _enemyHp);\r
-            if (json.api_hougeki1 != null)\r
-                CalcHougekiDamage(json.api_hougeki1, _friendHp, _enemyHp);\r
-            if (json.api_hougeki2() && json.api_hougeki2 != null)\r
-                CalcHougekiDamage(json.api_hougeki2, _friendHp, _enemyHp);\r
-            if (json.api_hougeki3() && json.api_hougeki3 != null)\r
-                CalcHougekiDamage(json.api_hougeki3, _guardHp, _enemyHp);\r
-            if (json.api_raigeki() && json.api_raigeki != null)\r
-                CalcSimpleDamage(json.api_raigeki, _guardHp, _enemyHp);\r
-        }\r
-\r
         // 以下のコードは航海日誌拡張版の以下のファイルのcalcResultRankを移植したもの\r
         // https://github.com/nekopanda/logbook/blob/94ceca4be6d4ce79a8759d1ee747fb9827c08edc/main/logbook/dto/BattleExDto.java\r
         //\r