1 // Copyright (C) 2015 Kazuhiro Fujieda <fujieda@users.osdn.me>
\r
3 // Licensed under the Apache License, Version 2.0 (the "License");
\r
4 // you may not use this file except in compliance with the License.
\r
5 // You may obtain a copy of the License at
\r
7 // http://www.apache.org/licenses/LICENSE-2.0
\r
9 // Unless required by applicable law or agreed to in writing, software
\r
10 // distributed under the License is distributed on an "AS IS" BASIS,
\r
11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
12 // See the License for the specific language governing permissions and
\r
13 // limitations under the License.
\r
15 using System.Collections.Generic;
\r
20 namespace KancolleSniffer
\r
22 public static class TextGenerator
\r
24 public static string GenerateShipList(IEnumerable<ShipStatus> shipList)
\r
25 => "ID,艦種,艦名,レベル\r\n" +
\r
27 from ship in shipList
\r
28 orderby ship.Spec.ShipType, -ship.Level, ship.ExpToNext
\r
29 select $"{ship.Id},{ship.Spec.ShipTypeName},{ship.Name},{ship.Level}");
\r
31 public static string GenerateItemList(IEnumerable<ItemStatus> itemList)
\r
32 => "区分,装備名,改修・熟練度,個数\r\n" +
\r
34 (from item in itemList
\r
35 where item.Spec.Id != -1
\r
36 orderby item.Spec.Type, item.Spec.Id, item.Alv, item.Level
\r
38 $"{item.Spec.TypeName},{item.Spec.Name},{(item.Level == 0 ? item.Alv == 0 ? 0 : item.Alv : item.Level)}"
\r
40 select grp.Key + $",{grp.Count()}"));
\r
42 public static string GenerateFleetData(Sniffer sniffer)
\r
44 var dict = new ItemName();
\r
45 var sb = new StringBuilder();
\r
46 var fn = new[] {"第一艦隊", "第二艦隊", "第三艦隊", "第四艦隊"};
\r
47 for (var f = 0; f < fn.Length; f++)
\r
49 sb.Append(fn[f] + "\r\n");
\r
50 foreach (var s in sniffer.GetShipStatuses(f))
\r
52 sb.Append($"{s.Name} Lv{s.Level}");
\r
53 foreach (var item in s.Slot.Where(item => item.Id != -1))
\r
55 sb.Append(" " + dict[item.Spec.Name] +
\r
56 (item.Alv == 0 ? "" : "+" + item.Alv) +
\r
57 (item.Level == 0 ? "" : "★" + item.Level));
\r
59 if (s.SlotEx.Id > 0)
\r
61 var item = s.SlotEx;
\r
62 sb.Append(" " + dict[item.Spec.Name]);
\r
66 var fp = sniffer.GetFighterPower(f);
\r
67 sb.Append($"制空: {(fp[0] == fp[1] ? fp[0].ToString() : fp[0] + "~" + fp[1])} " +
\r
68 $"索敵: {sniffer.GetFleetLineOfSights(f):F1}\r\n");
\r
70 return sb.ToString();
\r
73 private class ItemName
\r
75 private readonly Dictionary<string, string> _dict = new Dictionary<string, string>();
\r
81 foreach (var line in File.ReadLines("ItemName.csv"))
\r
83 var cols = line.Split(',');
\r
84 _dict[cols[0]] = cols[1];
\r
92 public string this[string name]
\r
97 return _dict.TryGetValue(name, out shortName) ? shortName : name;
\r
102 public static string GenerateDeckBuilderData(Sniffer sniffer)
\r
104 var sb = new StringBuilder("{\"version\": 3,");
\r
105 for (var f = 0; f < ShipInfo.FleetCount; f++)
\r
109 sb.Append($"\"f{f + 1}\":{{");
\r
110 var ships = sniffer.GetShipStatuses(f);
\r
111 for (var s = 0; s < ships.Length; s++)
\r
116 sb.Append($"\"s{s + 1}\":{{\"id\":\"{st.Spec.Id}\",\"lv\":{st.Level},\"luck\":{st.Lucky},\"items\":{{");
\r
117 var items = st.Slot;
\r
118 for (var i = 0; i < items.Length; i++)
\r
125 sb.Append($"\"i{i + 1}\":{{\"id\":{it.Spec.Id},\"rf\":{(it.Alv != 0 ? it.Alv : it.Level)}}}");
\r
132 return sb.ToString();
\r