OSDN Git Service

明石が中破以上でもタイマーが進んでしまうのを直す
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / ShipMaster.cs
index 419d210..160858e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014 Kazuhiro Fujieda <fujieda@users.sourceforge.jp>\r
+// Copyright (C) 2014, 2015 Kazuhiro Fujieda <fujieda@users.osdn.me>\r
 // \r
 // This program is part of KancolleSniffer.\r
 //\r
@@ -26,42 +26,63 @@ namespace KancolleSniffer
 \r
         public void Inspect(dynamic json)\r
         {\r
-            foreach (var entry in json)\r
+            var dict = new Dictionary<double, string>();\r
+            foreach (var entry in json.api_mst_stype)\r
+                dict[entry.api_id] = entry.api_name;\r
+            dict[8] = "高速戦艦" ;\r
+            foreach (var entry in json.api_mst_ship)\r
             {\r
-                _shipSpecs[(int)entry.api_id] = new ShipSpec\r
+                var shipSpec = _shipSpecs[(int)entry.api_id] = new ShipSpec\r
                 {\r
-                    Name = entry.api_name,\r
-                    FuelMax = (int)entry.api_fuel_max,\r
-                    BullMax = (int)entry.api_bull_max,\r
-                    MaxEq = (int[])entry.api_maxeq,\r
+                    Id = (int)entry.api_id,\r
+                    Name = ShipName(entry),\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
                     ShipType = (int)entry.api_stype,\r
+                    ShipTypeName = dict[entry.api_stype]\r
                 };\r
+                int[] maxEq;\r
+                shipSpec.MaxEq = entry.api_maxeq()\r
+                    ? entry.api_maxeq\r
+                    : MissingData.MaxEq.TryGetValue(shipSpec.Id, out maxEq) ? maxEq : null;\r
             }\r
-            _shipSpecs[-1] = new ShipSpec {Name = "不明", MaxEq = new int[NumSlots]};\r
+            _shipSpecs[-1] = new ShipSpec();\r
         }\r
 \r
-        public ShipSpec this[int id]\r
+        // 深海棲艦の名前にelite/flagshipを付ける\r
+        private string ShipName(dynamic json)\r
         {\r
-            get { return _shipSpecs[id]; }\r
+            var name = json.api_name;\r
+            var flagship = json.api_yomi;\r
+            if ((int)json.api_id <= 500 || flagship == "-" || flagship == "")\r
+                return name;\r
+            return name + "(" + flagship + ")";\r
         }\r
+\r
+        public ShipSpec this[int id] => _shipSpecs[id];\r
     }\r
 \r
-    public struct ShipSpec\r
+    public class ShipSpec\r
     {\r
+        public int Id { get; set; }\r
         public string Name { get; set; }\r
         public int FuelMax { get; set; }\r
         public int BullMax { get; set; }\r
         public int[] MaxEq { get; set; }\r
         public int ShipType { get; set; }\r
+        public string ShipTypeName { get; set; }\r
 \r
-        public bool IsSubmarine\r
+        public ShipSpec()\r
         {\r
-            get { return ShipType == 13 || ShipType == 14; }\r
+            Id = -1;\r
+            Name = "";\r
+            MaxEq = new int[0];\r
         }\r
 \r
         public double RepairWeight\r
         {\r
-            get {\r
+            get\r
+            {\r
                 switch (ShipType)\r
                 {\r
                     case 13: // 潜水艦\r
@@ -72,6 +93,7 @@ namespace KancolleSniffer
                     case 14: // 潜水空母\r
                     case 16: // 水上機母艦\r
                     case 17: // 揚陸艦\r
+                    case 21: // 練習巡洋艦\r
                         return 1.0;\r
                     case 5: // 重巡洋艦\r
                     case 6: // 航空巡洋艦\r
@@ -89,5 +111,33 @@ namespace KancolleSniffer
                 return 1.0;\r
             }\r
         }\r
+\r
+        public bool IsSubmarine => ShipType == 13 || ShipType == 14;\r
+\r
+        public bool IsAircraftCarrier => ShipType == 7 || ShipType == 11 || ShipType == 18;\r
+\r
+        public bool IsAntiSubmarine\r
+        {\r
+            get\r
+            {\r
+                switch (ShipType)\r
+                {\r
+                    case 2: // 駆逐\r
+                    case 3: // 軽巡\r
+                    case 4: // 雷巡\r
+                    case 6: // 航巡\r
+                    case 7: // 軽空\r
+                    case 10: // 航戦\r
+                    case 16: // 水母\r
+                    case 17: // 揚陸艦\r
+                    case 21: // 練巡\r
+                    case 22: // 補給艦\r
+                        return true;\r
+                }\r
+                return false;\r
+            }\r
+        }\r
+\r
+        public bool IsRepairShip => ShipType == 19;\r
     }\r
 }
\ No newline at end of file