OSDN Git Service

BaseAirCorpsをAirBaseにリネームする
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / TextGenerator.cs
index 45f227c..08841b7 100644 (file)
@@ -16,18 +16,20 @@ using System.Collections.Generic;
 using System.IO;\r
 using System.Linq;\r
 using System.Text;\r
+using KancolleSniffer.Model;\r
 \r
 namespace KancolleSniffer\r
 {\r
     public static class TextGenerator\r
     {\r
         public static string GenerateShipList(IEnumerable<ShipStatus> shipList)\r
-            => "ID,艦種,艦名,レベル,cond\r\n" +\r
+            => "ID,艦種,艦名,レベル,cond,素対潜\r\n" +\r
                string.Join("\r\n",\r
                    from ship in shipList\r
                    orderby ship.Spec.ShipType, -ship.Level, ship.ExpToNext\r
-                   select $"{ship.Id},{ship.Spec.ShipTypeName},{ship.Name},{ship.Level},{ship.Cond}");\r
+                   select $"{ship.Id},{ship.Spec.ShipTypeName},{ship.Name},{ship.Level},{ship.Cond},{ship.ShipAntiSubmarine}");\r
 \r
+        // ReSharper disable IdentifierTypo\r
         public static string GenerateKantaiSarashiData(IEnumerable<ShipStatus> shipList)\r
         {\r
             return ".2|" +\r
@@ -43,12 +45,13 @@ namespace KancolleSniffer
                                       ? "." + ship.Spec.Remodel.Step\r
                                       : "")));\r
         }\r
+        // ReSharper restore IdentifierTypo\r
 \r
         public static string GenerateItemList(IEnumerable<ItemStatus> itemList)\r
             => "区分,装備名,熟練度,改修,個数\r\n" +\r
                string.Join("\r\n",\r
                    (from item in itemList\r
-                       where item.Spec.Id != -1\r
+                       where !item.Spec.Empty\r
                        orderby item.Spec.Type, item.Spec.Id, item.Alv, item.Level\r
                        group item by\r
                            $"{item.Spec.TypeName},{item.Spec.Name},{item.Alv},{item.Level}"\r
@@ -59,40 +62,57 @@ namespace KancolleSniffer
         {\r
             var dict = new ItemName();\r
             var sb = new StringBuilder();\r
+            for (var f = 0; f < ShipInfo.FleetCount; f++)\r
+                sb.Append(GenerateFleetData(sniffer, f, dict));\r
+            sb.Append(GenerateAirBase(sniffer, dict));\r
+            return sb.ToString();\r
+        }\r
+\r
+        public static string GenerateFleetData(Sniffer sniffer, int fleet)\r
+        {\r
+            return GenerateFleetData(sniffer, fleet, new ItemName()).ToString();\r
+        }\r
+\r
+        private static StringBuilder GenerateFleetData(Sniffer sniffer, int fleet, ItemName dict)\r
+        {\r
+            var target = sniffer.Fleets[fleet];\r
+            var sb = new StringBuilder();\r
             var fn = new[] {"第一艦隊", "第二艦隊", "第三艦隊", "第四艦隊"};\r
-            for (var f = 0; f < fn.Length; f++)\r
-            {\r
-                sb.Append(fn[f] + "\r\n");\r
-                sb.Append(string.Concat(from s in sniffer.GetShipStatuses(f)\r
-                    select ($"{s.Name} Lv{s.Level} " +\r
-                            string.Join(",",\r
-                                from item in s.AllSlot\r
-                                where item.Id != -1\r
-                                select dict[item.Spec.Name] + ItemStatusString(item))).TrimEnd(' ') + "\r\n"));\r
-                var fp = sniffer.GetFighterPower(f);\r
-                sb.Append($"制空: {(fp[0] == fp[1] ? fp[0].ToString() : fp[0] + "~" + fp[1])} " +\r
-                          $"索敵: {sniffer.GetFleetLineOfSights(f, 1):F1}\r\n");\r
-            }\r
-            if (sniffer.BaseAirCorps != null)\r
+            sb.Append(fn[fleet] + "\r\n");\r
+            sb.Append(string.Concat(from s in target.ActualShips\r
+                select ($"{s.Name} Lv{s.Level} " +\r
+                        string.Join(",",\r
+                            from item in s.AllSlot\r
+                            where !item.Empty\r
+                            select dict[item.Spec.Name] + ItemStatusString(item))).TrimEnd(' ') + "\r\n"));\r
+            var fp = target.FighterPower;\r
+            sb.Append($"制空: {(fp[0] == fp[1] ? fp[0].ToString() : fp[0] + "~" + fp[1])} " +\r
+                      $"索敵: {target.GetLineOfSights(1):F1}\r\n");\r
+            return sb;\r
+        }\r
+\r
+        private static StringBuilder GenerateAirBase(Sniffer sniffer, ItemName dict)\r
+        {\r
+            var sb = new StringBuilder();\r
+            if (sniffer.AirBase == null)\r
+                return sb;\r
+            foreach (var baseInfo in sniffer.AirBase)\r
             {\r
-                foreach (var baseInfo in sniffer.BaseAirCorps)\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(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
+                    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
-            return sb.ToString();\r
+            return sb;\r
         }\r
 \r
         private static string ItemStatusString(ItemStatus item)\r
@@ -123,13 +143,13 @@ namespace KancolleSniffer
         public static string GenerateDeckBuilderData(Sniffer sniffer)\r
         {\r
             var sb = new StringBuilder("{\"version\": 4,");\r
-            for (var f = 0; f < ShipInfo.FleetCount; f++)\r
+            foreach (var fleet in sniffer.Fleets)\r
             {\r
-                if (f != 0)\r
+                if (fleet.Number != 0)\r
                     sb.Append(",");\r
-                sb.Append($"\"f{f + 1}\":{{");\r
-                var ships = sniffer.GetShipStatuses(f);\r
-                for (var s = 0; s < ships.Length; s++)\r
+                sb.Append($"\"f{fleet.Number + 1}\":{{");\r
+                var ships = fleet.ActualShips;\r
+                for (var s = 0; s < ships.Count; s++)\r
                 {\r
                     if (s != 0)\r
                         sb.Append(",");\r
@@ -137,18 +157,18 @@ namespace KancolleSniffer
                     sb.Append(\r
                         $"\"s{s + 1}\":{{\"id\":\"{ship.Spec.Id}\",\"lv\":{ship.Level},\"luck\":{ship.Lucky},\"items\":{{");\r
                     var items = ship.Slot;\r
-                    for (var i = 0; i < items.Length; i++)\r
+                    for (var i = 0; i < items.Count; i++)\r
                     {\r
                         var item = items[i];\r
-                        if (item.Id == -1)\r
+                        if (item.Empty)\r
                             continue;\r
                         if (i != 0)\r
                             sb.Append(",");\r
                         sb.Append($"\"i{i + 1}\":{{\"id\":{item.Spec.Id},\"rf\":{item.Level},\"mas\":{item.Alv}}}");\r
                     }\r
-                    if (ship.SlotEx.Id != 0 && ship.SlotEx.Id != -1)\r
+                    if (!ship.SlotEx.Unimplemented && !ship.SlotEx.Empty)\r
                     {\r
-                        if (ship.Slot.Any(item => item.Id != -1))\r
+                        if (ship.Slot.Any(item => !item.Empty))\r
                             sb.Append(",");\r
                         var name = ship.Spec.SlotNum == 5 ? "ix" : $"i{ship.Spec.SlotNum + 1}";\r
                         sb.Append($"\"{name}\":{{\"id\":{ship.SlotEx.Spec.Id},\"rf\":{ship.SlotEx.Level}}}");\r