OSDN Git Service

装備の所持者を設定する方法を変える
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Sun, 14 Aug 2016 09:14:27 +0000 (18:14 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Tue, 16 Aug 2016 15:58:01 +0000 (00:58 +0900)
KancolleSniffer.Test/SnifferTest.cs
KancolleSniffer/ItemInfo.cs
KancolleSniffer/ItemTreeView.cs
KancolleSniffer/ShipInfo.cs
KancolleSniffer/Sniffer.cs

index d67d9ac..6342d66 100644 (file)
@@ -633,7 +633,7 @@ namespace KancolleSniffer.Test
         {\r
             var sniffer = new Sniffer();\r
             SniffLogFile(sniffer, "dropship_001");\r
-            PAssert.That(() => sniffer.ItemList[0].Ship.Id == 250);\r
+            PAssert.That(() => sniffer.ItemList[0].Holder.Id == 250);\r
         }\r
 \r
         /// <summary>\r
index ebefe26..0ccfa43 100644 (file)
@@ -253,7 +253,7 @@ namespace KancolleSniffer
         public ItemSpec Spec { get; set; } = new ItemSpec();\r
         public int Level { get; set; }\r
         public int Alv { get; set; }\r
-        public ShipStatus Ship { get; set; }\r
+        public ShipStatus Holder { get; set; }\r
 \r
         public ItemStatus()\r
         {\r
@@ -568,19 +568,14 @@ namespace KancolleSniffer
             return _itemInfo.TryGetValue(id, out item) ? item : new ItemStatus(id);\r
         }\r
 \r
-        public ItemStatus[] GetItemListWithOwner(ShipStatus[] shipList)\r
+        public void ClearHolder()\r
         {\r
-            foreach (var e in _itemInfo)\r
-                e.Value.Ship = new ShipStatus();\r
-            foreach (var s in shipList)\r
-            {\r
-                foreach (var item in s.Slot)\r
-                    item.Ship = s;\r
-                s.SlotEx.Ship = s;\r
-            }\r
-            return (from e in _itemInfo where e.Key != -1 select e.Value).ToArray();\r
+            foreach (var item in _itemInfo.Values)\r
+                item.Holder = new ShipStatus();\r
         }\r
 \r
+        public ItemStatus[] ItemList => (from e in _itemInfo where e.Key != -1 select e.Value).ToArray();\r
+\r
         public string GetUseItemName(int id) => _useItemName[id];\r
     }\r
 }
\ No newline at end of file
index e59b2c4..975b9be 100644 (file)
@@ -42,9 +42,9 @@ namespace KancolleSniffer
                 into grp\r
                 from byShip in\r
                     (from item in grp\r
-                        let ship = item.Ship\r
+                        let ship = item.Holder\r
                         orderby ship.Level descending, ship.Spec.SortNo\r
-                        group item by item.Ship.Id)\r
+                        group item by item.Holder.Id)\r
                 group byShip by grp.Key)\r
                 group byItem by byItem.First().First().Spec.Type;\r
 \r
@@ -65,7 +65,7 @@ namespace KancolleSniffer
                     typeNode.Nodes.Add(itemNode);\r
                     foreach (var byShip in byItem)\r
                     {\r
-                        var ship = byShip.First().Ship;\r
+                        var ship = byShip.First().Holder;\r
                         var name = byShip.Key == -1\r
                             ? "未装備x" + byShip.Count()\r
                             : (ship.Fleet != -1 ? ship.Fleet + 1 + " " : "") +\r
@@ -83,16 +83,16 @@ namespace KancolleSniffer
             {\r
                 Level = org.Level,\r
                 Spec = org.Spec,\r
-                Ship = new ShipStatus {Id = org.Ship.Id, Fleet = org.Ship.Fleet}\r
+                Holder = new ShipStatus {Id = org.Holder.Id, Fleet = org.Holder.Fleet}\r
             };\r
         }\r
 \r
         private class ItemStatusComparer : IEqualityComparer<ItemStatus>\r
         {\r
             public bool Equals(ItemStatus x, ItemStatus y)\r
-                => x.Level == y.Level && x.Spec == y.Spec && x.Ship.Id == y.Ship.Id && x.Ship.Fleet == y.Ship.Fleet;\r
+                => x.Level == y.Level && x.Spec == y.Spec && x.Holder.Id == y.Holder.Id && x.Holder.Fleet == y.Holder.Fleet;\r
 \r
-            public int GetHashCode(ItemStatus obj) => obj.Level + obj.Spec.GetHashCode() + obj.Ship.GetHashCode();\r
+            public int GetHashCode(ItemStatus obj) => obj.Level + obj.Spec.GetHashCode() + obj.Holder.GetHashCode();\r
         }\r
 \r
         [DllImport("user32.dll")]\r
index 5e39aa3..6739618 100644 (file)
@@ -527,6 +527,13 @@ namespace KancolleSniffer
             return s;\r
         }\r
 \r
+        public void SetItemHolder()\r
+        {\r
+            foreach (var ship in _shipInfo.Values)\r
+                foreach (var item in ship.Slot)\r
+                    _itemInfo.GetStatus(item.Id).Holder = ship;\r
+        }\r
+\r
         public ShipSpec GetSpec(int id) => _shipMaster[id];\r
 \r
         public bool InMission(int fleet) => _inMission[fleet];\r
index 015b438..1187013 100644 (file)
@@ -515,7 +515,15 @@ namespace KancolleSniffer
 \r
         public string[] BadlyDamagedShips => _shipInfo.BadlyDamagedShips;\r
 \r
-        public ItemStatus[] ItemList => _itemInfo.GetItemListWithOwner(ShipList);\r
+        public ItemStatus[] ItemList\r
+        {\r
+            get\r
+            {\r
+                _itemInfo.ClearHolder();\r
+                _shipInfo.SetItemHolder();\r
+                return _itemInfo.ItemList;\r
+            }\r
+        }\r
 \r
         public AkashiTimer AkashiTimer => _akashiTimer;\r
 \r