OSDN Git Service

対空噴進弾幕の発動率を表示する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Mon, 15 Jul 2019 09:58:26 +0000 (18:58 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Mon, 15 Jul 2019 09:58:26 +0000 (18:58 +0900)
KancolleSniffer/View/AntiAirPanel.cs
KancolleSniffer/View/ShipLabel.cs

index ae4b556..1beb641 100644 (file)
@@ -16,6 +16,7 @@ using System.Collections.Generic;
 using System.Drawing;\r
 using System.Linq;\r
 using System.Windows.Forms;\r
+using KancolleSniffer.Model;\r
 \r
 namespace KancolleSniffer.View\r
 {\r
@@ -67,27 +68,57 @@ namespace KancolleSniffer.View
                 var forFleet = new[] {1.0, 1.2, 1.6}.Select(r => (int)(rawForFleet * r) * 2 / 1.3).ToArray();\r
                 _table.Add(new Record\r
                 {\r
-                    Fleet = fn[fleet.Number] + " " + string.Join("/", forFleet.Select(x => x.ToString("f1")))\r
+                    Fleet = fn[fleet.Number] + " 防空" + string.Join("/", forFleet.Select(x => x.ToString("f1")))\r
                 });\r
                 foreach (var ship in ships)\r
                 {\r
-                    var rate = ship.EffectiveAntiAirForShip / 4.0;\r
-                    var diff = forFleet.Select(x => (x + ship.EffectiveAntiAirForShip) / 10.0);\r
-                    _table.Add(new Record\r
-                    {\r
-                        Ship = ship.Name + " Lv" + ship.Level +\r
-                               " : " + ship.EffectiveAntiAirForShip.ToString("d"),\r
-                        Id = ship.Id\r
-                    });\r
-                    _table.Add(new Record\r
-                    {\r
-                        Rate = "割合: " + rate.ToString("f1") + "% ",\r
-                        Diff = "固定: " + string.Join("/", diff.Select(d => d.ToString("f1")))\r
-                    });\r
+                    _table.Add(CreateShipRecord(ship));\r
+                    _table.Add(CreateAntiAirRecord(forFleet, ship));\r
                 }\r
             }\r
         }\r
 \r
+        private Record CreateShipRecord(ShipStatus ship)\r
+        {\r
+            var param = " Lv" + ship.Level +\r
+                        " 加重" + ship.EffectiveAntiAirForShip.ToString("d") +\r
+                        AntiAirPropellantBarrageChange(ship);\r
+            var name = ship.Name;\r
+            var realWidth = Scaler.ScaleWidth(ListForm.PanelWidth - 10);\r
+            return new Record\r
+            {\r
+                Ship = StringTruncator.Truncate(name, param, realWidth, GetFont(name)) + param,\r
+                Id = ship.Id\r
+            };\r
+        }\r
+\r
+        private Record CreateAntiAirRecord(double[] forFleet, ShipStatus ship)\r
+        {\r
+            var rate = ship.EffectiveAntiAirForShip / 4.0;\r
+            var diff = forFleet.Select(x => (x + ship.EffectiveAntiAirForShip) / 10.0);\r
+            return new Record\r
+            {\r
+                Rate = "割合" + rate.ToString("f1") + "% ",\r
+                Diff = "固定" + string.Join("/", diff.Select(d => d.ToString("f1")))\r
+            };\r
+        }\r
+\r
+        private static Font GetFont(string name)\r
+        {\r
+            return ShipLabel.Name.StartWithLetter(name)\r
+                ? ShipLabel.Name.LatinFont\r
+                : ShipLabel.Name.BaseFont;\r
+        }\r
+\r
+        private static string AntiAirPropellantBarrageChange(ShipStatus ship)\r
+        {\r
+            // ReSharper disable once CompareOfFloatsByEqualityOperator\r
+            if (ship.AntiAirPropellantBarrageChance == 0)\r
+                return "";\r
+            var chance = ship.AntiAirPropellantBarrageChance;\r
+            return " 弾幕" + chance.ToString(chance >= 100 ? "d" : "f1");\r
+        }\r
+\r
         private void CreateLabels()\r
         {\r
             for (var i = _labelList.Count; i < _table.Count; i++)\r
index 45a1c65..a252c81 100644 (file)
@@ -149,7 +149,7 @@ namespace KancolleSniffer.View
 \r
             private void ChangeFont(string name)\r
             {\r
-                var lu = new Regex(@"^\p{Lu}").IsMatch(name);\r
+                var lu = StartWithLetter(name);\r
                 var shift = Scaler.ScaleHeight(1);\r
                 if (lu && !Font.Equals(LatinFont))\r
                 {\r
@@ -163,6 +163,11 @@ namespace KancolleSniffer.View
                 }\r
             }\r
 \r
+            public static bool StartWithLetter(string name)\r
+            {\r
+                return Regex.IsMatch(name, @"^\p{Lu}");\r
+            }\r
+\r
             protected override void OnPaint(PaintEventArgs e)\r
             {\r
                 base.OnPaint(e);\r