OSDN Git Service

明石が中破以上でもタイマーが進んでしまうのを直す
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Wed, 11 Nov 2015 10:58:02 +0000 (19:58 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Thu, 12 Nov 2015 11:40:52 +0000 (20:40 +0900)
KancolleSniffer/AkashiTimer.cs
KancolleSniffer/ItemInfo.cs
KancolleSniffer/ShipMaster.cs

index e40f997..e59a887 100644 (file)
@@ -54,11 +54,6 @@ namespace KancolleSniffer
 \r
             public State State { get; set; }\r
 \r
-            public void Invalidate()\r
-            {\r
-                _target = new ShipStatus[0];\r
-            }\r
-\r
             public bool IsRepaired(ShipStatus[] target) => _target.Zip(target, (a, b) => a.NowHp < b.NowHp).Any(x => x);\r
 \r
             public bool DeckChanged(IEnumerable<int> deck) => !_deck.SequenceEqual(deck);\r
@@ -188,28 +183,39 @@ namespace KancolleSniffer
             var repair = _repairStatuses[fleet];\r
             var fs = _shipInfo.GetStatus(deck[0]);\r
             repair.State = State.Continue;\r
-            if (!fs.Name.StartsWith("明石"))\r
+            if (!fs.Spec.IsRepairShip)\r
             {\r
-                repair.Invalidate();\r
+                repair.UpdateTarget(new ShipStatus[0]);\r
                 repair.Deck = deck;\r
                 return;\r
             }\r
-            var cap = fs.Slot.Count(item => item.Spec.Name == "艦艇修理施設") + 2;\r
+            if (repair.DeckChanged(deck))\r
+            {\r
+                repair.State = State.Reset;\r
+                repair.Deck = deck;\r
+            }\r
+            var target = RepairTarget(deck);\r
+            if (repair.IsRepaired(target))\r
+                repair.State = State.Reset;\r
+            repair.UpdateTarget(target);\r
+        }\r
+\r
+        private ShipStatus[] RepairTarget(int[] deck)\r
+        {\r
+            var fs = _shipInfo.GetStatus(deck[0]);\r
+            if (fs.DamageLevel >= ShipStatus.Damage.Half)\r
+                return new ShipStatus[0];\r
+            var cap = fs.Slot.Count(item => item.Spec.IsRepairFacility) + 2;\r
             /*\r
              * 泊地修理の条件を満たさない艦はMaxHp==NowHpのダミーを設定する。\r
              * - 入渠中の艦娘は終わったときに回復扱いされないようNowHp=MaxHpに\r
              * - 中破以上でNowHp=MaxHpにすると回復扱いされるのでNowHp=MaxHp=0に\r
             */\r
-            var target = (from id in deck.Take(cap)\r
+            return (from id in deck.Take(cap)\r
                 let s = _shipInfo.GetStatus(id)\r
                 let full = new ShipStatus {NowHp = s.MaxHp, MaxHp = s.MaxHp}\r
                 let zero = new ShipStatus()\r
                 select _dockInfo.InNDock(id) ? full : s.DamageLevel >= ShipStatus.Damage.Half ? zero : s).ToArray();\r
-            repair.State = State.Continue;\r
-            if (repair.DeckChanged(deck) || repair.IsRepaired(target))\r
-                repair.State = State.Reset;\r
-            repair.UpdateTarget(target);\r
-            repair.Deck = deck;\r
         }\r
 \r
         public RepairSpan[] GetTimers(int fleet)\r
index eeefa44..4cf1307 100644 (file)
@@ -109,6 +109,8 @@ namespace KancolleSniffer
 \r
         public bool IsReconSeaplane => Type == 10;\r
 \r
+        public bool IsRepairFacility => Type == 31;\r
+\r
         public Color Color\r
         {\r
             get\r
index 7259acd..160858e 100644 (file)
@@ -137,5 +137,7 @@ namespace KancolleSniffer
                 return false;\r
             }\r
         }\r
+\r
+        public bool IsRepairShip => ShipType == 19;\r
     }\r
 }
\ No newline at end of file