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