OSDN Git Service

idが-1かどうかの場合分けを減らすリファクタリング
authorKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Fri, 25 Jul 2014 08:54:46 +0000 (17:54 +0900)
committerKazuhiro Fujieda <fujieda@users.sourceforge.jp>
Sat, 26 Jul 2014 01:09:20 +0000 (10:09 +0900)
KancolleSniffer/AkashiTimer.cs
KancolleSniffer/BattleInfo.cs
KancolleSniffer/DockInfo.cs
KancolleSniffer/ItemInfo.cs
KancolleSniffer/ShipInfo.cs
KancolleSniffer/ShipMaster.cs

index d202896..670a668 100644 (file)
@@ -65,8 +65,7 @@ namespace KancolleSniffer
         {\r
             var deck = _shipInfo.GetDeck(fleet);\r
             var fs = deck[0];\r
-            if (fs == -1 || !_shipInfo[fs].Name.StartsWith("明石") || _dockInfo.InNDock(fs) ||\r
-                _missionInfo.InMission(fleet))\r
+            if (!_shipInfo[fs].Name.StartsWith("明石") || _dockInfo.InNDock(fs) || _missionInfo.InMission(fleet))\r
             {\r
                 InvalidateTimer(fleet);\r
                 return;\r
@@ -74,7 +73,7 @@ namespace KancolleSniffer
             if (_repairStatuses[fleet].DeckChanged(deck))\r
                 InvalidateTimer(fleet);\r
             var cap = _shipInfo[fs].Slot.Count(item => _itemInfo[item].Name == "艦艇修理施設") + 2;\r
-            var targets = deck.Take(cap).Where(id => id != -1 && !_dockInfo.InNDock(id)).ToArray();\r
+            var targets = deck.Take(cap).Where(id => !_dockInfo.InNDock(id)).ToArray();\r
             var totalHp = (from id in targets\r
                 let status = _shipInfo[id]\r
                 where status.NowHp < status.MaxHp && status.DamageLevel < ShipStatus.Damage.Half\r
index d10c405..f4c379a 100644 (file)
@@ -126,9 +126,7 @@ namespace KancolleSniffer
             {\r
                 Friend = (from status in _shipInfo.GetShipStatuses((int)json.api_dock_id - 1)\r
                     select _shipMaster[status.ShipId].IsSubmarine).ToArray(),\r
-                Enemy = (from id in (int[])json.api_ship_ke\r
-                    where id != -1\r
-                    select _shipMaster[id].IsSubmarine).ToArray()\r
+                Enemy = (from id in (int[])json.api_ship_ke where id != -1 select _shipMaster[id].IsSubmarine).ToArray()\r
             };\r
         }\r
 \r
index 7a4f1d6..5a640ca 100644 (file)
@@ -57,7 +57,7 @@ namespace KancolleSniffer
 \r
         public bool InNDock(int id)\r
         {\r
-            return _ndoc.Any(n => n == id);\r
+            return _ndoc.Any(n => n == id); // 空のドックのidは0\r
         }\r
 \r
         public void InspectKDock(dynamic json)\r
index 34466ee..6fe83d2 100644 (file)
@@ -89,6 +89,7 @@ namespace KancolleSniffer
                     TyKu = (int)entry.api_type[0] == 3 || (int)entry.api_type[2] == 11 ? (int)entry.api_tyku : 0 // 艦載機と水上爆撃機のみ\r
                 };\r
             }\r
+            _itemSpecs[-1] = new ItemSpec();\r
         }\r
 \r
         public void InspectSlotItem(dynamic json, bool full = false)\r
@@ -99,6 +100,7 @@ namespace KancolleSniffer
                 NowItems = ((object[])json).Length;\r
             foreach (var entry in json)\r
                 _itemIds[(int)entry.api_id] = (int)entry.api_slotitem_id;\r
+            _itemIds[-1] = -1;\r
         }\r
 \r
         public void InspectCreateItem(dynamic json)\r
@@ -126,14 +128,12 @@ namespace KancolleSniffer
 \r
         public ItemSpec this[int id]\r
         {\r
-            get\r
-            {\r
-                int itemId;\r
-                ItemSpec spec;\r
-                if (_itemIds.TryGetValue(id, out itemId) && _itemSpecs.TryGetValue(itemId, out spec))\r
-                    return spec;\r
-                return new ItemSpec();\r
-            }\r
+            get { return GetSpecById(id); }\r
+        }\r
+\r
+        public ItemSpec GetSpecById(int id)\r
+        {\r
+            return _itemSpecs[_itemIds[id]];\r
         }\r
     }\r
 }
\ No newline at end of file
index c4196ee..efe628c 100644 (file)
@@ -144,6 +144,7 @@ namespace KancolleSniffer
                     OnSlot = (from num in (dynamic[])entry.api_onslot select (int)num).ToArray(),\r
                     Slot = (from num in (dynamic[])entry.api_slot select (int)num).ToArray()\r
                 };\r
+                _shipInfo[-1] = new ShipStatus {Name = "不明"};\r
             }\r
             _conditionTimer.SetTimer();\r
         }\r
@@ -304,7 +305,7 @@ namespace KancolleSniffer
         public int GetAirSuperiority(int fleet)\r
         {\r
             return (from id in _decks[fleet]\r
-                where _shipInfo.ContainsKey(id)\r
+                where id != -1\r
                 let ship = _shipInfo[id]\r
                 from slot in ship.Slot.Zip(ship.OnSlot, (s, o) => new {slot = s, onslot = o})\r
                 select (int)Math.Floor(_itemInfo[slot.slot].TyKu * Math.Sqrt(slot.onslot))).Sum();\r
index 09a20f0..9115e85 100644 (file)
@@ -35,15 +35,12 @@ namespace KancolleSniffer
                     ShipType = (int)entry.api_stype,\r
                 };\r
             }\r
+            _shipSpecs[-1] = new ShipSpec {Name = "不明"};\r
         }\r
 \r
         public ShipSpec this[int id]\r
         {\r
-            get\r
-            {\r
-                ShipSpec spec;\r
-                return _shipSpecs.TryGetValue(id, out spec) ? spec : new ShipSpec {Name = "不明"};\r
-            }\r
+            get { return _shipSpecs[id]; }\r
         }\r
     }\r
 \r