1 // Copyright (C) 2019 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.Drawing;
\r
16 using System.Windows.Forms;
\r
17 using KancolleSniffer.Model;
\r
19 namespace KancolleSniffer.View
\r
21 public class NumberAndHistoryLabels
\r
23 public Label NumOfShips { get; set; }
\r
24 public Label NumOfEquips { get; set; }
\r
25 public Label NumOfBuckets { get; set; }
\r
26 public Label BucketHistory { get; set; }
\r
27 public Label Achievement { get; set; }
\r
28 public Label FuelHistory { get; set; }
\r
29 public Label BulletHistory { get; set; }
\r
30 public Label SteelHistory { get; set; }
\r
31 public Label BauxiteHistory { get; set; }
\r
32 public ToolTip ToolTip { get; set; }
\r
35 public interface INotifySubmitter
\r
38 void Enqueue(string key, string subject);
\r
41 public class NumberAndHistory
\r
43 private readonly NumberAndHistoryLabels _labels;
\r
44 private readonly Sniffer _sniffer;
\r
45 private readonly ToolTip _toolTip;
\r
46 private readonly INotifySubmitter _submitter;
\r
48 public NumberAndHistory(NumberAndHistoryLabels labels, Sniffer sniffer, INotifySubmitter submitter)
\r
52 _toolTip = labels.ToolTip;
\r
53 _submitter = submitter;
\r
56 public void Update()
\r
59 UpdateNumOfEquips();
\r
61 UpdateNumOfBuckets();
\r
62 UpdateBucketHistory();
\r
63 UpdateAchievement();
\r
64 UpdateMaterialHistory();
\r
67 private void UpdateNumOfBuckets()
\r
69 _labels.NumOfBuckets.Text = _sniffer.Material.MaterialHistory[(int)Material.Bucket].Now.ToString("D");
\r
72 private void UpdateAchievement()
\r
74 var ac = _sniffer.Achievement.Value;
\r
77 _labels.Achievement.Text = ac >= 1000 ? ((int)ac).ToString("D") : ac.ToString("F1");
\r
78 _toolTip.SetToolTip(_labels.Achievement,
\r
79 "今月 " + _sniffer.Achievement.ValueOfMonth.ToString("F1") + "\n" +
\r
80 "EO " + _sniffer.ExMap.Achievement);
\r
83 public void UpdateNumOfShips()
\r
85 var ship = _sniffer.ShipCounter;
\r
86 _labels.NumOfShips.Text = $"{ship.Now:D}/{ship.Max:D}";
\r
87 _labels.NumOfShips.ForeColor = ship.TooMany ? CUDColors.Red : Color.Black;
\r
90 var message = $"残り{ship.Rest:D}隻";
\r
91 _submitter.Enqueue("艦娘数超過", message);
\r
96 public void UpdateNumOfEquips()
\r
98 var item = _sniffer.ItemCounter;
\r
99 _labels.NumOfEquips.Text = $"{item.Now:D}/{item.Max:D}";
\r
100 _labels.NumOfEquips.ForeColor = item.TooMany ? CUDColors.Red : Color.Black;
\r
103 var message = $"残り{item.Rest:D}個";
\r
104 _submitter.Enqueue("装備数超過", message);
\r
105 item.Alarm = false;
\r
109 private void UpdateBucketHistory()
\r
111 var count = _sniffer.Material.MaterialHistory[(int)Material.Bucket];
\r
112 var day = CutOverflow(count.Now - count.BegOfDay, 999);
\r
113 var week = CutOverflow(count.Now - count.BegOfWeek, 999);
\r
114 _labels.BucketHistory.Text = $"{day:+#;-#;±0} 今日\n{week:+#;-#;±0} 今週";
\r
117 private void UpdateMaterialHistory()
\r
119 var labels = new[] {_labels.FuelHistory, _labels.BulletHistory, _labels.SteelHistory, _labels.BauxiteHistory };
\r
120 var text = new[] { "燃料", "弾薬", "鋼材", "ボーキ" };
\r
121 for (var i = 0; i < labels.Length; i++)
\r
123 var count = _sniffer.Material.MaterialHistory[i];
\r
124 var port = CutOverflow(count.Now - _sniffer.Material.PrevPort[i], 99999);
\r
125 var day = CutOverflow(count.Now - count.BegOfDay, 99999);
\r
126 var week = CutOverflow(count.Now - count.BegOfWeek, 99999);
\r
127 labels[i].Text = $"{text[i]}\n{port:+#;-#;±0}\n{day:+#;-#;±0}\n{week:+#;-#;±0}";
\r
131 private int CutOverflow(int value, int limit)
\r
135 if (value < -limit)
\r