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
17 using KancolleSniffer.Util;
\r
19 namespace KancolleSniffer.Model
\r
21 public class DockInfo
\r
23 public const int DockCount = 4;
\r
24 private readonly ShipInventory _shipInventory;
\r
25 private readonly MaterialInfo _materialInfo;
\r
26 private readonly int[] _ndock = new int[DockCount];
\r
27 private readonly AlarmTimer[] _ndockTimers = new AlarmTimer[DockCount];
\r
28 private readonly AlarmTimer[] _kdockTimers = new AlarmTimer[DockCount];
\r
30 public DockInfo(ShipInventory shipInventory, MaterialInfo material)
\r
32 _shipInventory = shipInventory;
\r
33 _materialInfo = material;
\r
34 for (var i = 0; i < _ndockTimers.Length; i++)
\r
35 _ndockTimers[i] = new AlarmTimer();
\r
36 for (var i = 0; i < _kdockTimers.Length; i++)
\r
37 _kdockTimers[i] = new AlarmTimer(0);
\r
40 public void InspectNDock(dynamic json)
\r
42 foreach (var entry in json)
\r
44 var id = (int)entry.api_id - 1;
\r
45 _ndockTimers[id].SetEndTime(entry.api_complete_time);
\r
46 var prev = _ndock[id];
\r
47 _ndock[id] = (int)entry.api_ship_id;
\r
48 if (prev != 0 && _ndock[id] == 0) // 修復完了
\r
49 _shipInventory[prev].RepairShip();
\r
53 public void InspectNyukyo(string request)
\r
55 var values = HttpUtility.ParseQueryString(request);
\r
56 var id = int.Parse(values["api_ship_id"]);
\r
57 var ship = _shipInventory[id];
\r
58 var m = ship.NdockItem;
\r
59 _materialInfo.SubMaterial(Material.Fuel, m[0]);
\r
60 _materialInfo.SubMaterial(Material.Steal, m[1]);
\r
61 if (int.Parse(values["api_highspeed"]) == 1)
\r
64 _materialInfo.SubMaterial(Material.Bucket, 1);
\r
67 if (ship.RepairTime.CompareTo(TimeSpan.FromMinutes(1)) <= 0)
\r
71 public void InspectSpeedChange(string request)
\r
73 var values = HttpUtility.ParseQueryString(request);
\r
74 var dock = int.Parse(values["api_ndock_id"]) - 1;
\r
75 _shipInventory[_ndock[dock]].RepairShip();
\r
77 _ndockTimers[dock].SetEndTime(0);
\r
78 _materialInfo.SubMaterial(Material.Bucket, 1);
\r
81 public NameAndTimer[] NDock
\r
82 => _ndock.Zip(_ndockTimers,
\r
83 (id, timer) => new NameAndTimer {Name = id == 0 ? "" : _shipInventory[id].Name, Timer = timer}).ToArray();
\r
85 public bool InNDock(int id) => _ndock.Any(n => n == id); // 空のドックのidは0
\r
87 public void InspectKDock(dynamic json)
\r
89 foreach (var entry in json)
\r
91 var timer = _kdockTimers[(int)entry.api_id - 1];
\r
92 var complete = (double)entry.api_complete_time;
\r
93 if ((int)complete == 0 && (int)entry.api_created_ship_id != 0)
\r
99 timer.SetEndTime(complete);
\r
104 public void InspectCreateShipSpeedChange(string request)
\r
106 var values = HttpUtility.ParseQueryString(request);
\r
107 var dock = int.Parse(values["api_kdock_id"]) - 1;
\r
108 _kdockTimers[dock].Finish();
\r
111 public AlarmTimer[] KDock => _kdockTimers;
\r