OSDN Git Service

編成を入れ替えたときに再計算の必要なときだけ疲労タイマーを無効にする
authorKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Mon, 16 Jun 2014 15:38:46 +0000 (00:38 +0900)
committerKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Mon, 16 Jun 2014 15:38:46 +0000 (00:38 +0900)
KancolleSniffer/ConditionTimer.cs
KancolleSniffer/ShipInfo.cs

index 393ff44..ccba897 100644 (file)
@@ -8,6 +8,7 @@ namespace KancolleSniffer
         private readonly ShipInfo _shipInfo;\r
         private readonly DateTime[][] _times = new DateTime[ShipInfo.FleetCount][];\r
         private readonly bool[] _enable = new bool[ShipInfo.FleetCount];\r
+        private readonly int[] _cond = new int[ShipInfo.FleetCount];\r
 \r
         public ConditionTimer(ShipInfo shipInfo)\r
         {\r
@@ -21,9 +22,7 @@ namespace KancolleSniffer
             for (var fleet = 0; fleet < ShipInfo.FleetCount; fleet++)\r
             {\r
                 _enable[fleet] = true;\r
-                var cond =\r
-                    (from id in _shipInfo.GetDeck(fleet) where id != -1 select _shipInfo[id].Cond)\r
-                        .DefaultIfEmpty(49).Min();\r
+                var cond = _cond[fleet] = CondMin(fleet);\r
                 var time49 = _times[fleet][2];\r
                 if (cond < 49 && time49 != DateTime.MinValue) // 計時中\r
                 {\r
@@ -40,9 +39,15 @@ namespace KancolleSniffer
             }\r
         }\r
 \r
-        public void Disable(int fleet)\r
+        public void Invalidate(int fleet)\r
         {\r
-            _enable[fleet] = false;\r
+            _enable[fleet] = _cond[fleet] == CondMin(fleet);\r
+        }\r
+\r
+        private int CondMin(int fleet)\r
+        {\r
+            return (from id in _shipInfo.GetDeck(fleet) where id != -1 select _shipInfo[id].Cond)\r
+                .DefaultIfEmpty(49).Min();\r
         }\r
 \r
         public string[] GetTimerStrings(int fleet)\r
index beb676c..4716081 100644 (file)
@@ -155,12 +155,12 @@ namespace KancolleSniffer
             var fleet = int.Parse(values["api_id"]) - 1;\r
             var idx = int.Parse(values["api_ship_idx"]);\r
             var ship = int.Parse(values["api_ship_id"]);\r
-            _conditionTimer.Disable(fleet);\r
             if (idx == -1)\r
             {\r
                 var deck = _decks[fleet];\r
                 for (var i = 1; i < deck.Length; i++)\r
                     deck[i] = -1;\r
+                _conditionTimer.Invalidate(fleet);\r
                 return;\r
             }\r
             if (ship == -1)\r
@@ -173,9 +173,11 @@ namespace KancolleSniffer
                 // 入れ替えの場合\r
                 if ((_decks[f][i] = _decks[fleet][idx]) == -1)\r
                     RemoveShip(f, i);\r
-                _conditionTimer.Disable(f);\r
+                if (f != fleet)\r
+                    _conditionTimer.Invalidate(f);\r
             });\r
             _decks[fleet][idx] = ship;\r
+            _conditionTimer.Invalidate(fleet);\r
         }\r
 \r
         private void AlterShip(int ship, Action<int, int> action)\r
@@ -196,7 +198,7 @@ namespace KancolleSniffer
             for (var i = idx; i < deck.Length - 1; i++)\r
                 deck[i] = deck[i + 1];\r
             deck[deck.Length - 1] = -1;\r
-            _conditionTimer.Disable(fleet);\r
+            _conditionTimer.Invalidate(fleet);\r
         }\r
 \r
         public void InspectPowerup(string request, dynamic json)\r