OSDN Git Service

複数マップを攻略する任務のカウンターの仕様と実装を変更する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Sun, 22 Dec 2019 12:41:57 +0000 (21:41 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Wed, 25 Dec 2019 08:49:53 +0000 (17:49 +0900)
KancolleSniffer.Test/QuestCounterTest.cs
KancolleSniffer/Model/QuestCounter.cs

index 9776671..4b2c4a8 100644 (file)
@@ -144,38 +144,38 @@ namespace KancolleSniffer.Test
             Assert.AreEqual("2/3", status.QuestCountList[0].ToString());\r
             Assert.AreEqual("20/36 7/6 10/24 8/12", status.QuestCountList[1].ToString());\r
             var z = status.QuestCountList[2];\r
-            Assert.AreEqual("4/4", z.ToString());\r
+            Assert.AreEqual("2\u200a1\u200a1\u200a1", z.ToString());\r
             Assert.AreEqual("2-4 6-1 6-3 6-4", z.ToToolTip());\r
             z.NowArray = new[] {0, 0, 0, 0};\r
             Assert.AreEqual("", z.ToToolTip());\r
             var q426 = status.QuestCountList[3];\r
-            Assert.AreEqual("4/4", q426.ToString());\r
+            Assert.AreEqual("1\u200a1\u200a1\u200a1", q426.ToString());\r
             Assert.AreEqual("警備任務 対潜警戒任務 海上護衛任務 強硬偵察任務", q426.ToToolTip());\r
             var q428 = status.QuestCountList[4];\r
             Assert.AreEqual("対潜警戒任務1 海峡警備行動1 長時間対潜警戒1", q428.ToToolTip());\r
             q428.NowArray = new[] {0, 1, 0};\r
             Assert.AreEqual("海峡警備行動1", q428.ToToolTip());\r
             var q873 = status.QuestCountList[5];\r
-            Assert.AreEqual("3/3", q873.ToString());\r
+            Assert.AreEqual("1\u200a1\u200a1", q873.ToString());\r
             Assert.AreEqual("3-1 3-2 3-3", q873.ToToolTip());\r
             var q888 = status.QuestCountList[6];\r
-            Assert.AreEqual("3/3", q888.ToString());\r
+            Assert.AreEqual("1\u200a1\u200a1", q888.ToString());\r
             Assert.AreEqual("5-1 5-3 5-4", q888.ToToolTip());\r
             var q688 = status.QuestCountList[7];\r
             Assert.AreEqual("艦戦2 艦爆1 艦攻2 水偵1", q688.ToToolTip());\r
             var q893 = status.QuestCountList[8];\r
             Assert.AreEqual("1-5:1 7-1:1 7-2G:1 7-2M:1", q893.ToToolTip());\r
             var q894 = status.QuestCountList[9];\r
-            Assert.AreEqual("5/5", q894.ToString());\r
+            Assert.AreEqual("1\u200a1\u200a1\u200a1\u200a1", q894.ToString());\r
             Assert.AreEqual("1-3 1-4 2-1 2-2 2-3", q894.ToToolTip());\r
             var q280 = status.QuestCountList[10];\r
-            Assert.AreEqual("4/4", q280.ToString());\r
+            Assert.AreEqual("1\u200a1\u200a1\u200a1", q280.ToString());\r
             Assert.AreEqual("1-2 1-3 1-4 2-1", q280.ToToolTip());\r
             var q872 = status.QuestCountList.First(q => q.Id == 872);\r
-            Assert.AreEqual("4/4", q872.ToString());\r
+            Assert.AreEqual("1\u200a1\u200a1\u200a1", q872.ToString());\r
             Assert.AreEqual("7-2M 5-5 6-2 6-5", q872.ToToolTip());\r
             var q284 = status.QuestCountList.First(q => q.Id == 284);\r
-            Assert.AreEqual("4/4", q284.ToString());\r
+            Assert.AreEqual("1\u200a1\u200a1\u200a1", q284.ToString());\r
             Assert.AreEqual("1-4 2-1 2-2 2-3", q284.ToToolTip());\r
         }\r
     }\r
index 9c66937..20cae9b 100644 (file)
@@ -77,11 +77,11 @@ namespace KancolleSniffer.Model
 \r
         public override string ToString()\r
         {\r
-            if (Id == 280 || Id == 284 || Id == 426 || Id == 845 || Id == 854 || Id == 872 || Id == 873 || Id == 888 || Id == 894)\r
-                return $"{NowArray.Count(n => n >= 1)}/{Spec.MaxArray.Length}";\r
-            return NowArray != null\r
-                ? string.Join(" ", NowArray.Zip(Spec.MaxArray, (n, m) => $"{n}/{m}"))\r
-                : $"{Now}/{Spec.Max}";\r
+            return Spec.MaxArray != null && Spec.MaxArray.All(x => x == 1)\r
+                ? string.Join("\u200a", NowArray.Select(n => (n % 10).ToString()))\r
+                : Spec.MaxArray != null\r
+                    ? string.Join(" ", NowArray.Zip(Spec.MaxArray, (n, m) => $"{n}/{m}"))\r
+                    : $"{Now}/{Spec.Max}";\r
         }\r
 \r
         public QuestCount Clone()\r
@@ -101,61 +101,38 @@ namespace KancolleSniffer.Model
             return NowArray.SequenceEqual(other.NowArray);\r
         }\r
 \r
+        private static string MapString(int map)\r
+        {\r
+            return map switch\r
+            {\r
+                721 => "7-2G",\r
+                722 => "7-2M",\r
+                _ => $"{map / 10}-{map % 10}"\r
+            };\r
+        }\r
+\r
         public string ToToolTip()\r
         {\r
-            switch (Id)\r
+            if (Spec is QuestSortie spec && spec.Maps != null)\r
             {\r
-                case 280:\r
-                    return string.Join(" ",\r
-                        new[] {"1-2", "1-3", "1-4", "2-1"}.Zip(NowArray, (map, n) => n >= 1 ? map : "")\r
-                            .Where(s => !string.IsNullOrEmpty(s)));\r
-                case 284:\r
-                    return string.Join(" ",\r
-                        new[] {"1-4", "2-1", "2-2", "2-3"}.Zip(NowArray, (map, n) => n >= 1 ? map : "")\r
-                            .Where(s => !string.IsNullOrEmpty(s)));\r
-                case 426:\r
-                    return string.Join(" ",\r
-                        new[] {"警備任務", "対潜警戒任務", "海上護衛任務", "強硬偵察任務"}\r
-                            .Zip(NowArray, (mission, n) => n >= 1 ? mission : "")\r
-                            .Where(s => !string.IsNullOrEmpty(s)));\r
-                case 428:\r
-                    return string.Join(" ",\r
-                        new[] {"対潜警戒任務", "海峡警備行動", "長時間対潜警戒"}.Zip(NowArray, (mission, n) => n >= 1 ? mission + n : "")\r
-                            .Where(s => !string.IsNullOrEmpty(s)));\r
-                case 845:\r
-                    return string.Join(" ",\r
-                        new[] {"4-1", "4-2", "4-3", "4-4", "4-5"}.Zip(NowArray, (map, n) => n >= 1 ? map : "")\r
-                            .Where(s => !string.IsNullOrEmpty(s)));\r
-                case 854:\r
-                    return string.Join(" ",\r
-                        new[] {"2-4", "6-1", "6-3", "6-4"}.Zip(NowArray, (map, n) => n >= 1 ? map : "")\r
-                            .Where(s => !string.IsNullOrEmpty(s)));\r
-                case 872:\r
-                    return string.Join(" ",\r
-                        new[] {"7-2M", "5-5", "6-2", "6-5"}.Zip(NowArray, (map, n) => n >= 1 ? map : "")\r
-                            .Where(s => !string.IsNullOrEmpty(s)));\r
-                case 873:\r
-                    return string.Join(" ",\r
-                        new[] {"3-1", "3-2", "3-3"}.Zip(NowArray, (map, n) => n >= 1 ? map : "")\r
-                            .Where(s => !string.IsNullOrEmpty(s)));\r
-                case 888:\r
-                    return string.Join(" ",\r
-                        new[] {"5-1", "5-3", "5-4"}.Zip(NowArray, (map, n) => n >= 1 ? map : "")\r
-                            .Where(s => !string.IsNullOrEmpty(s)));\r
-                case 688:\r
-                    return string.Join(" ",\r
-                        new[] {"艦戦", "艦爆", "艦攻", "水偵"}.Zip(NowArray, (type, n) => n >= 1 ? type + n : "")\r
-                            .Where(s => !string.IsNullOrEmpty(s)));\r
-                case 893:\r
-                    return string.Join(" ",\r
-                        new[] {"1-5", "7-1", "7-2G", "7-2M"}.Zip(NowArray, (map, n) => n >= 1 ? $"{map}:{n}" : "")\r
-                            .Where(s => !string.IsNullOrEmpty(s)));\r
-                case 894:\r
-                    return string.Join(" ",\r
-                        new[] {"1-3", "1-4", "2-1", "2-2", "2-3"}.Zip(NowArray, (map, n) => n >= 1 ? map : "")\r
-                            .Where(s => !string.IsNullOrEmpty(s)));\r
+                var flags = spec.MaxArray.All(x => x == 1);\r
+                return string.Join(" ",\r
+                    spec.Maps.Zip(NowArray, (map, n) => n >= 1 ? $"{MapString(map)}{(flags ? "" : $":{n}")}" : "")\r
+                    .Where(s => !string.IsNullOrEmpty(s)));\r
             }\r
-            return "";\r
+            return Id switch\r
+            {\r
+                426 => string.Join(" ",\r
+                    new[] {"警備任務", "対潜警戒任務", "海上護衛任務", "強硬偵察任務"}.Zip(NowArray, (mission, n) => n >= 1 ? mission : "")\r
+                        .Where(s => !string.IsNullOrEmpty(s))),\r
+                428 => string.Join(" ",\r
+                    new[] {"対潜警戒任務", "海峡警備行動", "長時間対潜警戒"}.Zip(NowArray, (mission, n) => n >= 1 ? mission + n : "")\r
+                        .Where(s => !string.IsNullOrEmpty(s))),\r
+                688 => string.Join(" ",\r
+                    new[] {"艦戦", "艦爆", "艦攻", "水偵"}.Zip(NowArray, (type, n) => n >= 1 ? type + n : "")\r
+                        .Where(s => !string.IsNullOrEmpty(s))),\r
+                _ => ""\r
+            };\r
         }\r
 \r
         public bool Cleared => NowArray?.Zip(Spec.MaxArray, (n, m) => n >= m).All(x => x) ??\r