OSDN Git Service

ItemInfoの抽象度を上げる
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Fri, 9 Oct 2015 15:28:28 +0000 (00:28 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Sat, 17 Oct 2015 06:18:06 +0000 (15:18 +0900)
KancolleSniffer/AkashiTimer.cs
KancolleSniffer/BattleInfo.cs
KancolleSniffer/EquipPanel.cs
KancolleSniffer/ItemInfo.cs
KancolleSniffer/Logger.cs
KancolleSniffer/ShipInfo.cs
KancolleSniffer/Sniffer.cs

index d63ca32..14f7deb 100644 (file)
@@ -183,7 +183,7 @@ namespace KancolleSniffer
                 repair.Invalidate();\r
             }\r
             repair.Deck = deck.ToArray();\r
-            var cap = _shipInfo[fs].Slot.Count(item => _itemInfo[item].Name == "艦艇修理施設") + 2;\r
+            var cap = _shipInfo[fs].Slot.Count(id => _itemInfo.GetName(id) == "艦艇修理施設") + 2;\r
             var target = deck.Take(cap).Select(id =>\r
             {\r
                 /*\r
index fd97908..5832b77 100644 (file)
@@ -400,7 +400,7 @@ namespace KancolleSniffer
                 }\r
                 Damage += NowHp;\r
                 NowHp = 0;\r
-                var idex = _slotEx == 0 ? -1 : _itemInfo[_slotEx].Id;\r
+                var idex = _slotEx == 0 ? -1 : _itemInfo.GetItemId(_slotEx);\r
                 if (idex == 42) // ダメコン\r
                 {\r
                     _slotEx = -1;\r
@@ -415,7 +415,7 @@ namespace KancolleSniffer
                 }\r
                 for (var j = 0; j < _slot.Length; j++)\r
                 {\r
-                    var id = _itemInfo[_slot[j]].Id;\r
+                    var id = _itemInfo.GetItemId(_slot[j]);\r
                     if (id == 42) // ダメコン\r
                     {\r
                         _slot[j] = -1;\r
index 723c2b0..504318d 100644 (file)
@@ -78,7 +78,7 @@ namespace KancolleSniffer
                         var max = s.Spec.MaxEq[i];\r
                         if (slot == -1)\r
                             continue;\r
-                        var item = sniffer.Item.ItemDict[slot];\r
+                        var item = sniffer.Item.GetStatus(slot);\r
                         if (item.Spec.Name == "ドラム缶(輸送用)")\r
                             drum++;\r
                         var airspec = "";\r
@@ -106,7 +106,7 @@ namespace KancolleSniffer
                     }\r
                     if (s.SlotEx > 0)\r
                     {\r
-                        var item = sniffer.Item.ItemDict[s.SlotEx];\r
+                        var item = sniffer.Item.GetStatus(s.SlotEx);\r
                         equips.Add(new EquipColumn {Equip = item.Spec.Name, Color = item.Spec.Color});\r
                     }\r
                     if (drum != 0)\r
index 33621ea..ca898bd 100644 (file)
@@ -351,15 +351,15 @@ namespace KancolleSniffer
             }\r
         }\r
 \r
-        public ItemSpec this[int id] => GetSpecById(id);\r
+        public string GetName(int id) => _itemInfo[id].Spec.Name;\r
 \r
-        public ItemSpec GetSpecById(int id) => _itemInfo[id].Spec;\r
+        public int GetItemId(int id) => _itemInfo[id].Spec.Id;\r
 \r
         public ItemSpec GetSpecByItemId(int id) => _itemSpecs[id];\r
 \r
-        public Dictionary<int, ItemStatus> ItemDict => _itemInfo;\r
+        public ItemStatus GetStatus(int id) => _itemInfo[id];\r
 \r
-        public void SetItemOwner(ShipStatus[] shipList)\r
+        public ItemStatus[] GetItemListWithOwner(ShipStatus[] shipList)\r
         {\r
             foreach (var e in _itemInfo)\r
                 e.Value.Ship = new ShipStatus();\r
@@ -370,6 +370,7 @@ namespace KancolleSniffer
                 if (s.SlotEx != 0)\r
                     _itemInfo[s.SlotEx].Ship = s;\r
             }\r
+            return (from e in _itemInfo where e.Key != -1 select e.Value).ToArray();\r
         }\r
 \r
         public string GetUseItemName(int id) => _useItemName[id];\r
index 09d226c..5e265c3 100644 (file)
@@ -329,8 +329,8 @@ namespace KancolleSniffer
             var now = _nowFunc();\r
             var values = HttpUtility.ParseQueryString(request);\r
             var id = int.Parse(values["api_slot_id"]);\r
-            var name = _itemInfo[id].Name;\r
-            var level = _itemInfo.ItemDict[id].Level;\r
+            var name = _itemInfo.GetName(id);\r
+            var level = _itemInfo.GetStatus(id).Level;\r
             var success = (int)json.api_remodel_flag == 1 ? "○" : "×";\r
             var certain = int.Parse(values["api_certain_flag"]) == 1 ? "○" : "";\r
             var useName = "";\r
@@ -338,7 +338,7 @@ namespace KancolleSniffer
             if (json.api_use_slot_id())\r
             {\r
                 var use = (int[])json.api_use_slot_id;\r
-                useName = _itemInfo[use[0]].Name;\r
+                useName = _itemInfo.GetName(use[0]);\r
                 useNum = use.Length.ToString();\r
             }\r
             var after = (int[])json.api_after_material;\r
index bbce722..23c18dc 100644 (file)
@@ -102,7 +102,7 @@ namespace KancolleSniffer
                 if (!Spec.IsAircraftCarrier)\r
                     return Firepower + 5;\r
                 var specs = (from id in Slot\r
-                    let spec = _itemInfo.ItemDict[id].Spec\r
+                    let spec = _itemInfo.GetStatus(id).Spec\r
                     where spec.IsAircraft\r
                     select new {torpedo = spec.Torpedo, bomber = spec.Bomber}).ToArray();\r
                 var torpedo = specs.Sum(s => s.torpedo);\r
@@ -126,7 +126,7 @@ namespace KancolleSniffer
                 var aircraft = 0;\r
                 var all = 0;\r
                 var vanilla = AntiSubmarine;\r
-                foreach (var spec in Slot.Select(id => _itemInfo.ItemDict[id].Spec))\r
+                foreach (var spec in Slot.Select(id => _itemInfo.GetStatus(id).Spec))\r
                 {\r
                     vanilla -= spec.AntiSubmarine;\r
                     if (spec.IsReconSeaplane) // 水偵は除外\r
@@ -454,14 +454,13 @@ namespace KancolleSniffer
             => GetShipStatuses(fleet).Where(s => !s.Escaped).SelectMany(ship =>\r
                 ship.Slot.Zip(ship.OnSlot, (slot, onslot) =>\r
                 {\r
-                    var spec = _itemInfo[slot];\r
-                    if (!spec.CanAirCombat)\r
+                    var item = _itemInfo.GetStatus(slot);\r
+                    if (!item.Spec.CanAirCombat)\r
                         return 0;\r
-                    var item = _itemInfo.ItemDict[slot];\r
                     var bonus = 0;\r
                     if (onslot != 0 && item.Alv == 7 && withBonus)\r
-                        _alvBonus.TryGetValue(spec.Type, out bonus);\r
-                    return (int)Floor(spec.AntiAir * Sqrt(onslot)) + bonus;\r
+                        _alvBonus.TryGetValue(item.Spec.Type, out bonus);\r
+                    return (int)Floor(item.Spec.AntiAir * Sqrt(onslot)) + bonus;\r
                 })).Sum();\r
 \r
         public ShipStatus[] GetDamagedShipList(DockInfo dockInfo)\r
@@ -476,7 +475,7 @@ namespace KancolleSniffer
             foreach (var s in _decks[fleet].Select(id => _shipInfo[id]))\r
             {\r
                 var items = 0;\r
-                foreach (var spec in s.Slot.Select(t => _itemInfo[t]))\r
+                foreach (var spec in s.Slot.Select(id => _itemInfo.GetStatus(id).Spec))\r
                 {\r
                     items += spec.LoS;\r
                     result += spec.LoS * spec.LoSScaleFactor();\r
index 5087d85..369b906 100644 (file)
@@ -396,14 +396,7 @@ namespace KancolleSniffer
 \r
         public ShipStatus[] ShipList => _shipInfo.ShipList;\r
 \r
-        public ItemStatus[] ItemList\r
-        {\r
-            get\r
-            {\r
-                _itemInfo.SetItemOwner(ShipList);\r
-                return (from e in _itemInfo.ItemDict where e.Key != -1 select e.Value).ToArray();\r
-            }\r
-        }\r
+        public ItemStatus[] ItemList => _itemInfo.GetItemListWithOwner(ShipList);\r
 \r
         public AkashiTimer.RepairSpan[] GetAkashiTimers(int fleet) => _akashiTimer.GetTimers(fleet);\r
 \r