1 // Copyright (C) 2014, 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
18 namespace KancolleSniffer
\r
20 public class DockInfo
\r
22 public const int DockCount = 4;
\r
23 private readonly ShipInfo _shipInfo;
\r
24 private readonly MaterialInfo _materialInfo;
\r
25 private readonly int[] _ndoc = new int[DockCount];
\r
26 private readonly AlarmTimer[] _ndocTimers = new AlarmTimer[DockCount];
\r
27 private readonly AlarmTimer[] _kdocTimers = new AlarmTimer[DockCount];
\r
29 public DockInfo(ShipInfo ship, MaterialInfo material)
\r
32 _materialInfo = material;
\r
33 for (var i = 0; i < _ndocTimers.Length; i++)
\r
34 _ndocTimers[i] = new AlarmTimer();
\r
35 for (var i = 0; i < _kdocTimers.Length; i++)
\r
36 _kdocTimers[i] = new AlarmTimer(0);
\r
39 public void InspectNDock(dynamic json)
\r
41 foreach (var entry in json)
\r
43 var id = (int)entry.api_id - 1;
\r
44 _ndocTimers[id].SetEndTime(entry.api_complete_time);
\r
45 var prev = _ndoc[id];
\r
46 _ndoc[id] = (int)entry.api_ship_id;
\r
47 if (prev != 0 && _ndoc[id] == 0) // 修復完了
\r
48 _shipInfo.RepairShip(prev);
\r
52 public void InspectNyukyo(string request)
\r
54 var values = HttpUtility.ParseQueryString(request);
\r
55 var id = int.Parse(values["api_ship_id"]);
\r
56 var ship = _shipInfo.GetStatus(id);
\r
57 var m = ship.NdockItem;
\r
58 _materialInfo.SubMaterial(Material.Fuel, m[0]);
\r
59 _materialInfo.SubMaterial(Material.Steal, m[1]);
\r
60 if (int.Parse(values["api_highspeed"]) == 1)
\r
62 _shipInfo.RepairShip(id);
\r
63 _materialInfo.SubMaterial(Material.Bucket, 1);
\r
66 if (ship.RepairTime.CompareTo(TimeSpan.FromMinutes(1)) <= 0)
\r
67 _shipInfo.RepairShip(id);
\r
70 public void InspectSpeedChange(string request)
\r
72 var values = HttpUtility.ParseQueryString(request);
\r
73 var dock = int.Parse(values["api_ndock_id"]) - 1;
\r
74 _shipInfo.RepairShip(_ndoc[dock]);
\r
76 _ndocTimers[dock].SetEndTime(0);
\r
77 _materialInfo.SubMaterial(Material.Bucket, 1);
\r
80 public NameAndTimer[] NDock
\r
81 => _ndoc.Zip(_ndocTimers,
\r
82 (id, timer) => new NameAndTimer {Name = id == 0 ? "" : _shipInfo.GetStatus(id).Name, Timer = timer}).ToArray();
\r
84 public bool InNDock(int id) => _ndoc.Any(n => n == id); // 空のドックのidは0
\r
86 public void InspectKDock(dynamic json)
\r
88 foreach (var entry in json)
\r
90 var timer = _kdocTimers[(int)entry.api_id - 1];
\r
91 var complete = (double)entry.api_complete_time;
\r
92 if ((int)complete == 0 && (int)entry.api_created_ship_id != 0)
\r
98 timer.SetEndTime(complete);
\r
103 public void InspectCreateShipSpeedChange(string request)
\r
105 var values = HttpUtility.ParseQueryString(request);
\r
106 var dock = int.Parse(values["api_kdock_id"]) - 1;
\r
107 _kdocTimers[dock].Finish();
\r
110 public AlarmTimer[] KDock => _kdocTimers;
\r