OSDN Git Service

基地航空隊の仕様変更に対応する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 8 Oct 2016 08:58:30 +0000 (17:58 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Tue, 11 Oct 2016 11:34:35 +0000 (20:34 +0900)
KancolleSniffer.Test/SnifferTest.cs
KancolleSniffer/BaseAirCoprs.cs
KancolleSniffer/FleetPanel.cs
KancolleSniffer/Sniffer.cs
KancolleSniffer/TextGenerator.cs

index 25ed87c..30d2313 100644 (file)
@@ -429,9 +429,9 @@ namespace KancolleSniffer.Test
         {\r
             var sniffer = new Sniffer();\r
             SniffLogFile(sniffer, "fighterpower_004");\r
-            PAssert.That(() => sniffer.BaseAirCorps[0].FighterPower[1] == 301);\r
-            sniffer.BaseAirCorps[0].Action = 2; // 防空\r
-            PAssert.That(()=>sniffer.BaseAirCorps[0].FighterPower[1] == 320);\r
+            PAssert.That(() => sniffer.BaseAirCorps[0].AirCorps[0].FighterPower[1] == 301);\r
+            sniffer.BaseAirCorps[0].AirCorps[0].Action = 2; // 防空\r
+            PAssert.That(()=>sniffer.BaseAirCorps[0].AirCorps[0].FighterPower[1] == 320);\r
         }\r
 \r
         /// <summary>\r
index 7d2d4e5..d617f4d 100644 (file)
@@ -21,14 +21,21 @@ namespace KancolleSniffer
     public class BaseAirCoprs\r
     {\r
         private readonly ItemInfo _itemInfo;\r
-        private List<int> _relocationgPlanes;\r
+        private List<int> _relocationgPlanes = new List<int>();\r
 \r
         public BaseAirCoprs(ItemInfo item)\r
         {\r
             _itemInfo = item;\r
         }\r
 \r
-        public AirCorpsInfo[] AirCorps { get; set; }\r
+        public BaseInfo[] AllAirCorps { get; set; }\r
+\r
+        public class BaseInfo\r
+        {\r
+            public int AreaId { get; set; }\r
+            public string AreaName => AreaId == 6 ? "中部海域" : "限定海域";\r
+            public AirCorpsInfo[] AirCorps { get; set; }\r
+        }\r
 \r
         public class AirCorpsInfo\r
         {\r
@@ -103,29 +110,33 @@ namespace KancolleSniffer
 \r
         public void Inspect(dynamic json)\r
         {\r
-            AirCorps = (from entry in (dynamic[])json\r
-                select\r
-                    new AirCorpsInfo\r
-                    {\r
-                        Distance = (int)entry.api_distance,\r
-                        Action = (int)entry.api_action_kind,\r
-                        Planes = (from plane in (dynamic[])entry.api_plane_info\r
-                            select new PlaneInfo\r
-                            {\r
-                                Slot = _itemInfo.GetStatus((int)plane.api_slotid),\r
-                                State = (int)plane.api_state,\r
-                                Count = plane.api_count() ? (int)plane.api_count : 0,\r
-                                MaxCount = plane.api_max_count() ? (int)plane.api_max_count : 0,\r
-                            }).ToArray()\r
-                    }).ToArray();\r
+            AllAirCorps = (from entry in (dynamic[])json\r
+                group\r
+                new AirCorpsInfo\r
+                {\r
+                    Distance = (int)entry.api_distance,\r
+                    Action = (int)entry.api_action_kind,\r
+                    Planes = (from plane in (dynamic[])entry.api_plane_info\r
+                        select new PlaneInfo\r
+                        {\r
+                            Slot = _itemInfo.GetStatus((int)plane.api_slotid),\r
+                            State = (int)plane.api_state,\r
+                            Count = plane.api_count() ? (int)plane.api_count : 0,\r
+                            MaxCount = plane.api_max_count() ? (int)plane.api_max_count : 0,\r
+                        }).ToArray()\r
+                } by entry.api_area_id() ? (int)entry.api_area_id : 0\r
+                into grp\r
+                select new BaseInfo {AreaId = grp.Key, AirCorps = grp.ToArray()}).ToArray();\r
         }\r
 \r
         public void InspectSetPlane(string request, dynamic json)\r
         {\r
-            if (AirCorps == null)\r
+            if (AllAirCorps == null)\r
                 return;\r
             var values = HttpUtility.ParseQueryString(request);\r
-            var airCorps = AirCorps[int.Parse(values["api_base_id"]) - 1];\r
+            var areaId = int.Parse(values["api_area_id"] ?? "0");\r
+            var airCorps =\r
+                AllAirCorps.First(b => b.AreaId == areaId).AirCorps[int.Parse(values["api_base_id"]) - 1];\r
             if (json.api_distance()) // 2016春イベにはない\r
                 airCorps.Distance = (int)json.api_distance;\r
             foreach (var planeInfo in json.api_plane_info)\r
@@ -151,42 +162,59 @@ namespace KancolleSniffer
 \r
         public void InspectSetAction(string request)\r
         {\r
-            if (AirCorps == null)\r
+            if (AllAirCorps == null)\r
                 return;\r
             var values = HttpUtility.ParseQueryString(request);\r
+            var areaId = int.Parse(values["api_area_id"] ?? "0");\r
+            var airCorps = AllAirCorps.First(b => b.AreaId == areaId).AirCorps;\r
             foreach (var entry in\r
                 values["api_base_id"].Split(',')\r
                     .Zip(values["api_action_kind"].Split(','), (b, a) => new {baseId = b, action = a}))\r
             {\r
-                AirCorps[int.Parse(entry.baseId) - 1].Action = int.Parse(entry.action);\r
+                airCorps[int.Parse(entry.baseId) - 1].Action = int.Parse(entry.action);\r
             }\r
         }\r
 \r
-        public void InspectEventObject(dynamic json)\r
+        public void InspectPlaneInfo(dynamic json)\r
         {\r
             _relocationgPlanes = json.api_base_convert_slot()\r
                 ? new List<int>((int[])json.api_base_convert_slot)\r
                 : new List<int>();\r
         }\r
 \r
+        public void InspectEventObject(dynamic json)\r
+        {\r
+            InspectPlaneInfo(json);\r
+        }\r
+\r
         public void SetItemHolder()\r
         {\r
-            if (AirCorps == null)\r
+            if (AllAirCorps == null)\r
                 return;\r
             var name = new[] {"第一", "第二", "第三"};\r
             var i = 0;\r
-            foreach (var airCorps in AirCorps)\r
+            foreach (var baseInfo in AllAirCorps)\r
             {\r
-                if (i >= name.Length)\r
-                    break;\r
-                var ship = new ShipStatus {Id = 1000 + i, Spec = new ShipSpec {Name = name[i++] + "基地航空隊"}};\r
-                foreach (var plane in airCorps.Planes)\r
+                var areaAame = baseInfo.AreaName;\r
+                foreach (var airCorps in baseInfo.AirCorps)\r
                 {\r
-                    if (plane.State != 1)\r
-                        continue;\r
-                    _itemInfo.GetStatus(plane.Slot.Id).Holder = ship;\r
+                    if (i >= name.Length)\r
+                        break;\r
+                    var ship = new ShipStatus\r
+                    {\r
+                        Id = 1000 + i,\r
+                        Spec = new ShipSpec {Name = areaAame + " " + name[i++] + "航空隊"}\r
+                    };\r
+                    foreach (var plane in airCorps.Planes)\r
+                    {\r
+                        if (plane.State != 1)\r
+                            continue;\r
+                        _itemInfo.GetStatus(plane.Slot.Id).Holder = ship;\r
+                    }\r
                 }\r
             }\r
+            if (_relocationgPlanes == null)\r
+                return;\r
             var relocating = new ShipStatus {Id = 1500, Spec = new ShipSpec {Name = "配置転換中"}};\r
             foreach (var id in _relocationgPlanes)\r
                 _itemInfo.GetStatus(id).Holder = relocating;\r
index 4b18dd7..5781c28 100644 (file)
@@ -145,24 +145,30 @@ namespace KancolleSniffer
             if (sniffer.BaseAirCorps != null)\r
             {\r
                 var name = new[] {"第一", "第二", "第三"};\r
-                list.Add(new EquipColumn {Fleet = "基地航空隊"});\r
-                var i = 0;\r
-                foreach (var corps in sniffer.BaseAirCorps)\r
+                foreach (var baseInfo in sniffer.BaseAirCorps)\r
                 {\r
-                    if (i >= name.Length)\r
-                        break;\r
-                    var fp = corps.FighterPower;\r
-                    list.Add(new EquipColumn\r
+                    list.Add(new EquipColumn {Fleet = baseInfo.AreaName + " 基地航空隊"});\r
+                    var i = 0;\r
+                    foreach (var airCorps in baseInfo.AirCorps)\r
                     {\r
-                        Ship = name[i++] + " " + corps.ActionName,\r
-                        Spec = "制空" + (fp[0] == fp[1] ? fp[0].ToString() : fp[0] + "~" + fp[1]) + " 距離" + corps.Distance\r
-                    });\r
-                    list.AddRange(corps.Planes.Select(plane => new EquipColumn\r
-                    {\r
-                        Equip =\r
-                            plane.State != 1 ? plane.StateName : GenEquipString(plane.Slot, plane.Count, plane.MaxCount),\r
-                        Color = plane.Slot.Spec.Color\r
-                    }));\r
+                        if (i >= name.Length)\r
+                            break;\r
+                        var fp = airCorps.FighterPower;\r
+                        list.Add(new EquipColumn\r
+                        {\r
+                            Ship = name[i++] + " " + airCorps.ActionName,\r
+                            Spec = "制空" + (fp[0] == fp[1] ? fp[0].ToString() : fp[0] + "~" + fp[1]) +\r
+                                   " 距離" + airCorps.Distance\r
+                        });\r
+                        list.AddRange(airCorps.Planes.Select(plane => new EquipColumn\r
+                        {\r
+                            Equip =\r
+                                plane.State != 1\r
+                                    ? plane.StateName\r
+                                    : GenEquipString(plane.Slot, plane.Count, plane.MaxCount),\r
+                            Color = plane.Slot.Spec.Color\r
+                        }));\r
+                    }\r
                 }\r
             }\r
             _equipList = list.ToArray();\r
index 3f1c320..b941c9c 100644 (file)
@@ -138,6 +138,8 @@ namespace KancolleSniffer
                 _questInfo.QuestCount = (int)data.api_parallel_quest_count;\r
             if (data.api_event_object())\r
                 _baseAirCoprs.InspectEventObject(data.api_event_object);\r
+            if (data.api_plane_info())\r
+                _baseAirCoprs.InspectPlaneInfo(data.api_plane_info);\r
             _battleInfo.CleanupResult();\r
             _battleInfo.InBattle = false;\r
             _shipInfo.ClearEscapedShips();\r
@@ -223,6 +225,8 @@ namespace KancolleSniffer
             {\r
                 _exMapInfo.InspectMapInfo(data);\r
                 _miscTextInfo.InspectMapInfo(data);\r
+                if (data.api_air_base())\r
+                    _baseAirCoprs.Inspect(data.api_air_base);\r
                 return Update.Item;\r
             }\r
             if (url.EndsWith("api_req_member/get_practice_enemyinfo"))\r
@@ -539,7 +543,7 @@ namespace KancolleSniffer
 \r
         public string MiscText => _miscTextInfo.Text;\r
 \r
-        public BaseAirCoprs.AirCorpsInfo[] BaseAirCorps => _baseAirCoprs.AirCorps;\r
+        public BaseAirCoprs.BaseInfo[] BaseAirCorps => _baseAirCoprs.AllAirCorps;\r
 \r
         public void SetLogWriter(Action<string, string, string> writer, Func<DateTime> nowFunc)\r
         {\r
index 0aa2d23..e0bd246 100644 (file)
@@ -75,18 +75,21 @@ namespace KancolleSniffer
             }\r
             if (sniffer.BaseAirCorps != null)\r
             {\r
-                sb.Append("基地航空隊\r\n");\r
-                var i = 0;\r
-                var name = new[] {"第一 ", "第二 ", "第三 "};\r
-                foreach (var airCorps in sniffer.BaseAirCorps)\r
+                foreach (var baseInfo in sniffer.BaseAirCorps)\r
                 {\r
-                    sb.Append(name[i++]);\r
-                    sb.Append(\r
-                        string.Join(",",\r
-                            from plane in airCorps.Planes\r
-                            select plane.State == 1\r
-                                ? dict[plane.Slot.Spec.Name] + ItemStatusString(plane.Slot)\r
-                                : plane.StateName) + "\r\n");\r
+                    sb.Append(baseInfo.AreaName + " 基地航空隊\r\n");\r
+                    var i = 0;\r
+                    var name = new[] {"第一 ", "第二 ", "第三 "};\r
+                    foreach (var airCorps in baseInfo.AirCorps)\r
+                    {\r
+                        sb.Append(name[i++]);\r
+                        sb.Append(\r
+                            string.Join(",",\r
+                                from plane in airCorps.Planes\r
+                                select plane.State == 1\r
+                                    ? dict[plane.Slot.Spec.Name] + ItemStatusString(plane.Slot)\r
+                                    : plane.StateName) + "\r\n");\r
+                    }\r
                 }\r
             }\r
             return sb.ToString();\r