OSDN Git Service

1-6のチェックを汎用化する
[kancollesniffer/KancolleSniffer.git] / KancolleSniffer / MainForm.cs
index aec2e44..aee95f2 100644 (file)
@@ -46,7 +46,8 @@ namespace KancolleSniffer
         private readonly ResizableToolTip _tooltipCopy = new ResizableToolTip {ShowAlways = false, AutomaticDelay = 0};\r
         private int _currentFleet;\r
         private bool _combinedFleet;\r
-        private MainFormLabels _mainLabels;\r
+        private readonly MainShipLabels _mainLabels = new MainShipLabels();\r
+        private readonly MainNDockLabels _ndockLabels = new MainNDockLabels();\r
         private NumberAndHistory _numberAndHistory;\r
         private readonly ListForm _listForm;\r
         private readonly NotificationManager _notificationManager;\r
@@ -88,7 +89,6 @@ namespace KancolleSniffer
             SetupQuestPanel();\r
             panelRepairList.CreateLabels(panelRepairList_Click);\r
             PerformZoom();\r
-            _mainLabels.AdjustAkashiTimers();\r
         }\r
 \r
         private void SetScaleFactorOfDpiScaling()\r
@@ -107,15 +107,13 @@ namespace KancolleSniffer
 \r
         private void CreateMainLabels()\r
         {\r
-            _mainLabels = new MainFormLabels(new MainFormPanels\r
+            _mainLabels.CreateAllShipLabels(new MainShipPanels\r
             {\r
                 PanelShipInfo = panelShipInfo,\r
                 Panel7Ships = panel7Ships,\r
                 PanelCombinedFleet = panelCombinedFleet,\r
-                PanelNDock = panelDock\r
-            });\r
-            _mainLabels.CreateAllShipLabels(ShowShipOnShipList);\r
-            _mainLabels.CreateNDockLabels(labelNDock_Click);\r
+            }, ShowShipOnShipList);\r
+            _ndockLabels.Create(panelDock, labelNDock_Click);\r
         }\r
 \r
         private void CreateNumberAndHistory(NotificationManager manager)\r
@@ -505,7 +503,11 @@ namespace KancolleSniffer
         private void PerformZoom()\r
         {\r
             if (Config.Zoom == 100)\r
+            {\r
+                ShipLabel.Name.BaseFont = Font;\r
+                ShipLabel.Name.LatinFont = LatinFont();\r
                 return;\r
+            }\r
             var prev = CurrentAutoScaleDimensions;\r
             foreach (var control in new Control[]\r
             {\r
@@ -514,17 +516,28 @@ namespace KancolleSniffer
                 contextMenuStripMain, _errorDialog\r
             })\r
             {\r
-                control.Font = new Font(control.Font.FontFamily, control.Font.Size * Config.Zoom / 100);\r
+                control.Font = ZoomFont(control.Font);\r
             }\r
             foreach (var toolTip in new[] {_toolTip, _tooltipCopy})\r
             {\r
-                toolTip.Font = new Font(toolTip.Font.FontFamily, toolTip.Font.Size * Config.Zoom / 100);\r
+                toolTip.Font = ZoomFont(toolTip.Font);\r
             }\r
-            ShipLabel.Name.LatinFont = new Font("Tahoma", 8f * Config.Zoom / 100);\r
+            ShipLabel.Name.BaseFont = Font;\r
+            ShipLabel.Name.LatinFont = LatinFont();\r
             var cur = CurrentAutoScaleDimensions;\r
             Scaler.Factor = Scaler.Scale(cur.Width / prev.Width, cur.Height / prev.Height);\r
         }\r
 \r
+        private Font ZoomFont(Font font)\r
+        {\r
+            return new Font(font.FontFamily, font.Size * Config.Zoom / 100);\r
+        }\r
+\r
+        private Font LatinFont()\r
+        {\r
+            return new Font("Tahoma", 8f * Config.Zoom / 100);\r
+        }\r
+\r
         private void RestoreLocation()\r
         {\r
             if (Config.Location.X == int.MinValue)\r
@@ -544,6 +557,7 @@ namespace KancolleSniffer
             Sniffer.Achievement.ResetHours = Config.ResetHours;\r
             labelAkashiRepair.Visible = labelAkashiRepairTimer.Visible =\r
                 labelPresetAkashiTimer.Visible = Config.UsePresetAkashi;\r
+            Sniffer.WarnBadDamageWithDameCon = Config.WarnBadDamageWithDameCon;\r
         }\r
 \r
         public void ApplyDebugLogSetting()\r
@@ -659,15 +673,14 @@ namespace KancolleSniffer
 \r
         private void SetCurrentFleet()\r
         {\r
-            var states = Sniffer.Fleets.Select(fleet => fleet.State).ToArray();\r
-            var inSortie = states.Any(state => state >= FleetState.Sortie);\r
-            if (_inSortie || !inSortie)\r
+            var inSortie = Sniffer.InSortie;\r
+            if (_inSortie || inSortie == -1)\r
             {\r
-                _inSortie = inSortie;\r
+                _inSortie = inSortie != -1;\r
                 return;\r
             }\r
             _inSortie = true;\r
-            if (states[0] == FleetState.Sortie && states[1] == FleetState.Sortie)\r
+            if (inSortie == 10)\r
             {\r
                 _combinedFleet = true;\r
                 _currentFleet = 0;\r
@@ -675,7 +688,7 @@ namespace KancolleSniffer
             else\r
             {\r
                 _combinedFleet = false;\r
-                _currentFleet = Array.FindIndex(states, state => state >= FleetState.Sortie);\r
+                _currentFleet = inSortie;\r
             }\r
         }\r
 \r
@@ -815,24 +828,46 @@ namespace KancolleSniffer
 \r
         private void UpdateBattleFighterPower()\r
         {\r
+            UpdateEnemyFighterPower();\r
             var battle = Sniffer.Battle;\r
-            var power = battle.EnemyFighterPower;\r
-            labelEnemyFighterPower.Text = power.AirCombat + power.UnknownMark;\r
-            if (power.AirCombat != power.Interception)\r
+            labelFighterPower.ForeColor = battle.BattleState == BattleState.Night\r
+                ? DefaultForeColor\r
+                : AirControlLevelColor(battle.AirControlLevel);\r
+            if (battle.BattleState == BattleState.AirRaid)\r
             {\r
-                var text = "防空: " + power.Interception + power.UnknownMark;\r
-                _toolTip.SetToolTip(labelEnemyFighterPower, text);\r
-                _toolTip.SetToolTip(labelEnemyFighterPowerCaption, text);\r
+                UpdateAirRaidFighterPower();\r
             }\r
             else\r
             {\r
-                _toolTip.SetToolTip(labelEnemyFighterPower, "");\r
-                _toolTip.SetToolTip(labelEnemyFighterPowerCaption, "");\r
+                UpdateFighterPower(Sniffer.IsCombinedFleet && battle.EnemyIsCombined);\r
             }\r
-            UpdateFighterPower(Sniffer.IsCombinedFleet && battle.EnemyIsCombined);\r
-            labelFighterPower.ForeColor = new[]\r
-                {DefaultForeColor, DefaultForeColor, CUDColors.Blue, CUDColors.Green, CUDColors.Orange, CUDColors.Red}[\r
-                battle.AirControlLevel + 1];\r
+        }\r
+\r
+        private void UpdateEnemyFighterPower()\r
+        {\r
+            var fp = Sniffer.Battle.EnemyFighterPower;\r
+            labelEnemyFighterPower.Text = fp.AirCombat + fp.UnknownMark;\r
+            var toolTip = fp.AirCombat == fp.Interception ? "" : "防空: " + fp.Interception + fp.UnknownMark;\r
+            _toolTip.SetToolTip(labelEnemyFighterPower, toolTip);\r
+            _toolTip.SetToolTip(labelEnemyFighterPowerCaption, toolTip);\r
+        }\r
+\r
+        private void UpdateAirRaidFighterPower()\r
+        {\r
+            var fp = Sniffer.Battle.FighterPower;\r
+            labelFighterPower.Text = fp.Min.ToString();\r
+            var toolTop = fp.Diff ? fp.RangeString : "";\r
+            _toolTip.SetToolTip(labelFighterPower, toolTop);\r
+            _toolTip.SetToolTip(labelFighterPowerCaption, toolTop);\r
+        }\r
+\r
+        private static Color AirControlLevelColor(int level)\r
+        {\r
+            var colors = new[]\r
+            {\r
+                DefaultForeColor, DefaultForeColor, CUDColors.Blue, CUDColors.Green, CUDColors.Orange, CUDColors.Red\r
+            };\r
+            return colors[level + 1];\r
         }\r
 \r
         private void ShowResultRank()\r
@@ -856,12 +891,15 @@ namespace KancolleSniffer
                 var stat = Sniffer.Fleets[i].ChargeStatus;\r
                 fuelSq[i].ImageIndex = stat.Fuel;\r
                 bullSq[i].ImageIndex = stat.Bull;\r
+                var text = stat.Empty ? "" : $"燃{stat.FuelRatio * 100:f1}% 弾{stat.BullRatio * 100:f1}%";\r
+                _toolTip.SetToolTip(fuelSq[i], text);\r
+                _toolTip.SetToolTip(bullSq[i], text);\r
             }\r
         }\r
 \r
         private void UpdateNDocLabels()\r
         {\r
-            _mainLabels.SetNDockLabels(Sniffer.NDock);\r
+            _ndockLabels.SetName(Sniffer.NDock);\r
             SetNDockLabel();\r
         }\r
 \r
@@ -884,7 +922,7 @@ namespace KancolleSniffer
             var names = Sniffer.Missions.Select(mission => mission.Name).ToArray();\r
             for (var i = 0; i < ShipInfo.FleetCount - 1; i++)\r
             {\r
-                var fleetParams = GenerateFleetParamsForMission(i + 1);\r
+                var fleetParams = Sniffer.Fleets[i + 1].MissionParameter;\r
                 var inPort = string.IsNullOrEmpty(names[i]);\r
                 paramsLabels[i].Visible = inPort;\r
                 paramsLabels[i].Text = fleetParams;\r
@@ -899,23 +937,6 @@ namespace KancolleSniffer
             labelMission.Text = (Config.ShowEndTime & TimerKind.Mission) != 0 ? "遠征終了" : "遠征";\r
         }\r
 \r
-        private string GenerateFleetParamsForMission(int fleetNumber)\r
-        {\r
-            var result = new List<string>();\r
-            var fleet = Sniffer.Fleets[fleetNumber];\r
-            var kira = fleet.Ships.Count(ship => ship.Cond > 49);\r
-            var plus = fleet.Ships[0].Cond > 49;\r
-            if (kira > 0)\r
-                result.Add($"キラ{kira}{(plus ? "+" : "")}");\r
-            var drums = fleet.Ships.SelectMany(ship => ship.Slot).Count(item => item.Spec.IsDrum);\r
-            var drumShips = fleet.Ships.Count(ship => ship.Slot.Any(item => item.Spec.IsDrum));\r
-            if (drums > 0)\r
-                result.Add($"ド{drums}({drumShips}隻)");\r
-            if (fleet.DaihatsuBonus > 0)\r
-                result.Add($"ダ{fleet.DaihatsuBonus * 100:f1}%");\r
-            return string.Join(" ", result);\r
-        }\r
-\r
         private void labelMission_Click(object sender, EventArgs e)\r
         {\r
             Config.ShowEndTime ^= TimerKind.Mission;\r
@@ -935,7 +956,7 @@ namespace KancolleSniffer
             for (var i = 0; i < Sniffer.NDock.Length; i++)\r
             {\r
                 var entry = Sniffer.NDock[i];\r
-                _mainLabels.SetNDockTimer(i, entry.Timer, _now, (Config.ShowEndTime & TimerKind.NDock) != 0);\r
+                _ndockLabels.SetTimer(i, entry.Timer, _now, (Config.ShowEndTime & TimerKind.NDock) != 0);\r
             }\r
             var kdock = new[] {labelConstruct1, labelConstruct2, labelConstruct3, labelConstruct4};\r
             for (var i = 0; i < kdock.Length; i++)\r