OSDN Git Service

SGレーダー(初期型)の装備ボーナスを索敵スコアの計算から除く
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Fri, 25 Sep 2020 17:00:57 +0000 (02:00 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Fri, 25 Sep 2020 17:07:28 +0000 (02:07 +0900)
KancolleSniffer.Test/SnifferTest.cs
KancolleSniffer.Test/logs
KancolleSniffer.sln.DotSettings
KancolleSniffer/Model/Fleet.cs
KancolleSniffer/Model/ItemSpec.cs
KancolleSniffer/Model/ItemStatus.cs
KancolleSniffer/Model/ShipMaster.cs
KancolleSniffer/Model/ShipSpec.cs
KancolleSniffer/Model/ShipStatus.cs

index ec3c5ef..503b68d 100644 (file)
@@ -233,6 +233,18 @@ namespace KancolleSniffer.Test
         }\r
 \r
         /// <summary>\r
+        /// SGレーダー(初期型)の装備ボーナスを外して索敵スコアを計算する\r
+        /// </summary>\r
+        [TestMethod]\r
+        public void LineOfSightWithSgRadar()\r
+        {\r
+            var sniffer = new Sniffer();\r
+            SniffLogFile(sniffer, "lineofsight_004");\r
+            var fleet = sniffer.Fleets[0];\r
+            PAssert.That(() => Abs(fleet.GetLineOfSights(1) - 0.93) < 0.01);\r
+        }\r
+\r
+        /// <summary>\r
         /// 触接開始率を正しく計算する\r
         /// </summary>\r
         [TestMethod]\r
index 7877795..57340ec 160000 (submodule)
@@ -1 +1 @@
-Subproject commit 7877795d0035744d2fba262aac91245267b5bd8b
+Subproject commit 57340ec2ceb0ccd27c8f548bc67320e901dd68f2
index 53f1adb..3b54153 100644 (file)
@@ -56,4 +56,5 @@
        <s:Boolean x:Key="/Default/UserDictionary/Words/=Scrollify/@EntryIndexedValue">True</s:Boolean>
        <s:Boolean x:Key="/Default/UserDictionary/Words/=Seiran/@EntryIndexedValue">True</s:Boolean>
        <s:Boolean x:Key="/Default/UserDictionary/Words/=taiha/@EntryIndexedValue">True</s:Boolean>
-       <s:Boolean x:Key="/Default/UserDictionary/Words/=Truncator/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
+       <s:Boolean x:Key="/Default/UserDictionary/Words/=Truncator/@EntryIndexedValue">True</s:Boolean>
+       <s:Boolean x:Key="/Default/UserDictionary/Words/=Yomi/@EntryIndexedValue">True</s:Boolean></wpf:ResourceDictionary>
index 85e112f..26eb8c3 100644 (file)
@@ -216,20 +216,10 @@ namespace KancolleSniffer.Model
 \r
         public double GetLineOfSights(int factor)\r
         {\r
-            var result = 0.0;\r
-            var emptyBonus = 6;\r
-            foreach (var s in ActualShips.Where(s => !s.Escaped))\r
-            {\r
-                emptyBonus--;\r
-                var itemLoS = 0;\r
-                foreach (var item in s.AllSlot)\r
-                {\r
-                    var spec = item.Spec;\r
-                    itemLoS += spec.LoS;\r
-                    result += (spec.LoS + item.LoSLevelBonus) * spec.LoSScaleFactor * factor;\r
-                }\r
-                result += Sqrt(s.LoS - itemLoS);\r
-            }\r
+            var actual = ActualShips.Where(s => !s.Escaped).ToArray();\r
+            var emptyBonus = 6 - actual.Length;\r
+            var result = actual.Sum(s =>\r
+                s.AllSlot.Sum(item => item.EffectiveLoS * factor) + Sqrt(s.RawLoS));\r
             return result > 0 ? result - Ceiling(_getHqLevel() * 0.4) + emptyBonus * 2 : 0.0;\r
         }\r
 \r
index 5cd6f36..f2b5d50 100644 (file)
@@ -82,6 +82,8 @@ namespace KancolleSniffer.Model
             }\r
         }\r
 \r
+        public int LoSSgRadarBonus => Id == 315 ? 4 : 0;\r
+\r
         public bool IsAircraft\r
         {\r
             get\r
index 8ed38c5..4e908b1 100644 (file)
@@ -134,7 +134,9 @@ namespace KancolleSniffer.Model
             }\r
         }\r
 \r
-        public double LoSLevelBonus\r
+        public double EffectiveLoS => (Spec.LoS + LoSLevelBonus) * Spec.LoSScaleFactor;\r
+\r
+        private double LoSLevelBonus\r
         {\r
             get\r
             {\r
index d1dc0ad..bbfa882 100644 (file)
@@ -39,6 +39,7 @@ namespace KancolleSniffer.Model
                     Id = (int)entry.api_id,\r
                     SortId = entry.api_sort_id() ? (int)entry.api_sort_id : 0,\r
                     Name = ShipName(entry),\r
+                    Yomi = entry.api_yomi,\r
                     FuelMax = entry.api_fuel_max() ? (int)entry.api_fuel_max : 0,\r
                     BullMax = entry.api_bull_max() ? (int)entry.api_bull_max : 0,\r
                     SlotNum = (int)entry.api_slot_num,\r
index fd44535..60876c6 100644 (file)
@@ -21,6 +21,7 @@ namespace KancolleSniffer.Model
         public int Id { get; set; }\r
         public int SortId { get; set; }\r
         public string Name { get; set; }\r
+        public string Yomi { get; set; }\r
         public int FuelMax { get; set; }\r
         public int BullMax { get; set; }\r
         public int SlotNum { get; set; }\r
@@ -149,5 +150,31 @@ namespace KancolleSniffer.Model
         public bool IsRepairShip => ShipType == 19;\r
 \r
         public bool IsTrainingCruiser => ShipType == 21;\r
+\r
+        public bool HaveSgRadarBonus\r
+        {\r
+            get\r
+            {\r
+                switch (Yomi)\r
+                {\r
+                    case "フレッチャー":\r
+                    case "ジョンストン":\r
+                    case "サミュエル・B・ロバーツ":\r
+                    case "コロラド":\r
+                    case "サウスダコタ":\r
+                    case "アイオワ":\r
+                    case "サラトガ":\r
+                    case "ホーネット":\r
+                    case "イントレピッド":\r
+                    case "ガンビア・ベイ":\r
+                    case "ヒューストン":\r
+                    case "ヘレナ":\r
+                    case "アトランタ":\r
+                        return true;\r
+                    default:\r
+                        return false;\r
+                }\r
+            }\r
+        }\r
     }\r
 }
\ No newline at end of file
index 36977e3..57ce901 100644 (file)
@@ -417,6 +417,9 @@ namespace KancolleSniffer.Model
 \r
         public int EffectiveBullMax => Max((int)(Spec.BullMax * (Level >= 100 ? 0.85 : 1.0)), 1);\r
 \r
+        public int RawLoS =>\r
+            LoS - AllSlot.Sum(item => item.Spec.LoS + (Spec.HaveSgRadarBonus ? item.Spec.LoSSgRadarBonus : 0));\r
+\r
         public object Clone()\r
         {\r
             var r = (ShipStatus)MemberwiseClone();\r