4 namespace KancolleSniffer
\r
6 public class ConditionTimer
\r
8 private readonly ShipInfo _shipInfo;
\r
9 private readonly DateTime[][] _times = new DateTime[ShipInfo.FleetCount][];
\r
10 private readonly bool[] _enable = new bool[ShipInfo.FleetCount];
\r
11 private readonly int[] _cond = new int[ShipInfo.FleetCount];
\r
13 public ConditionTimer(ShipInfo shipInfo)
\r
15 _shipInfo = shipInfo;
\r
16 for (var f = 0; f < _times.Length; f++)
\r
17 _times[f] = new DateTime[3];
\r
20 public void SetTimer()
\r
22 for (var fleet = 0; fleet < ShipInfo.FleetCount; fleet++)
\r
24 _enable[fleet] = true;
\r
25 var cond = _cond[fleet] = CondMin(fleet);
\r
26 var time49 = _times[fleet][2];
\r
27 if (cond < 49 && time49 != DateTime.MinValue) // 計時中
\r
29 // コンディション値から推定される残り時刻と経過時間の差
\r
30 var diff = TimeSpan.FromMinutes((49 - cond + 2) / 3 * 3) - (time49 - DateTime.Now);
\r
31 if (diff >= TimeSpan.Zero && diff <= TimeSpan.FromMinutes(3)) // 差が0以上3分以内ならタイマーを更新しない。
\r
34 var thresh = new[] {30, 40, 49};
\r
35 for (var i = 0; i < thresh.Length; i++)
\r
36 _times[fleet][i] = cond < thresh[i]
\r
37 ? DateTime.Now.AddMinutes((thresh[i] - cond + 2) / 3 * 3)
\r
38 : DateTime.MinValue;
\r
42 public void Invalidate(int fleet)
\r
44 _enable[fleet] = _cond[fleet] == CondMin(fleet);
\r
47 private int CondMin(int fleet)
\r
49 return (from id in _shipInfo.GetDeck(fleet) where id != -1 select _shipInfo[id].Cond)
\r
50 .DefaultIfEmpty(49).Min();
\r
53 public string[] GetTimerStrings(int fleet)
\r
55 if (!_enable[fleet])
\r
56 return new[] {"無効", "無効", "無効"};
\r
57 var now = DateTime.Now;
\r
59 (from time in _times[fleet] select time > now ? (time - now).ToString(@"mm\:ss") : "00:00")
\r