OSDN Git Service

ShipStatusのSlotとSlotExに触ったときにItemSpecを取得する
authorKazuhiro Fujieda <fujieda@users.osdn.me>
Wed, 1 Aug 2018 12:40:12 +0000 (21:40 +0900)
committerKazuhiro Fujieda <fujieda@users.osdn.me>
Wed, 1 Aug 2018 12:40:12 +0000 (21:40 +0900)
KancolleSniffer.Test/SnifferTest.cs
KancolleSniffer/Model/BattleInfo.cs
KancolleSniffer/Model/ShipInfo.cs
KancolleSniffer/Model/ShipStatus.cs
KancolleSniffer/TextGenerator.cs
KancolleSniffer/View/BattleResultPanel.cs
KancolleSniffer/View/FleetPanel.cs

index 9de6667..71f62ed 100644 (file)
@@ -425,12 +425,14 @@ namespace KancolleSniffer.Test
                 ships.Select(ship => (int)(ship.NightBattlePower * 100))\r
                     .SequenceEqual(new[] {11202, 14985, 20092, 17354}));\r
             // 夜間作戦航空要員を外す\r
-            ships[0].Slot[3] = ships[1].Slot[2] = ships[3].Slot[2] = new ItemStatus();\r
+            ships[0].FreeSlot(3);\r
+            ships[1].FreeSlot(2);\r
+            ships[3].FreeSlot(2);\r
             PAssert.That(() =>\r
                 ships.Select(ship => (int)(ship.NightBattlePower * 100))\r
                     .SequenceEqual(new[] {6900, 7500, 20092, 0}));\r
             // Ark RoyalからSwordfishを外す\r
-            ships[0].Slot[0] = new ItemStatus();\r
+            ships[0].FreeSlot(0);\r
             PAssert.That(() => (int)ships[0].NightBattlePower == 0);\r
         }\r
 \r
index ff93b29..7bacec1 100644 (file)
@@ -193,11 +193,11 @@ namespace KancolleSniffer.Model
                 ship.SlotEx = new ItemStatus();\r
                 return;\r
             }\r
-            for (var i = 0; i < ship.Slot.Length; i++)\r
+            for (var i = 0; i < ship.Slot.Count; i++)\r
             {\r
                 if (ship.Slot[i].Spec.Id == id)\r
                 {\r
-                    ship.Slot[i] = new ItemStatus();\r
+                    ship.FreeSlot(i);\r
                     break;\r
                 }\r
             }\r
index 2219ebe..2aaae71 100644 (file)
@@ -169,6 +169,7 @@ namespace KancolleSniffer.Model
                     Fuel = (int)entry.api_fuel,\r
                     Bull = (int)entry.api_bull,\r
                     OnSlot = (int[])entry.api_onslot,\r
+                    GetItem = item => _itemInventry[item.Id],\r
                     Slot = ((int[])entry.api_slot).Select(item => new ItemStatus(item)).ToArray(),\r
                     SlotEx = entry.api_slot_ex() ? new ItemStatus((int)entry.api_slot_ex) : new ItemStatus(0),\r
                     NdockTime = (int)entry.api_ndock_time,\r
@@ -341,8 +342,6 @@ namespace KancolleSniffer.Model
         {\r
             if (ship.Empty)\r
                 return ship;\r
-            ship.Slot = ship.Slot.Select(item => _itemInventry[item.Id]).ToArray();\r
-            ship.SlotEx = _itemInventry[ship.SlotEx.Id];\r
             ship.Escaped = _escapedShips.Contains(ship.Id);\r
             ship.Fleet = FindFleet(ship.Id, out var idx);\r
             ship.DeckIndex = idx;\r
index fc0071d..da7f54f 100644 (file)
@@ -37,8 +37,6 @@ namespace KancolleSniffer.Model
         public int Fuel { get; set; }\r
         public int Bull { get; set; }\r
         public int[] OnSlot { get; set; }\r
-        public ItemStatus[] Slot { get; set; }\r
-        public ItemStatus SlotEx { get; set; }\r
         public int NdockTime { get; set; }\r
         public int[] NdockItem { get; set; }\r
         public int LoS { get; set; }\r
@@ -52,6 +50,24 @@ namespace KancolleSniffer.Model
 \r
         public Damage DamageLevel => CalcDamage(NowHp, MaxHp);\r
 \r
+        private IList<ItemStatus> _slot;\r
+        private ItemStatus _slotEx;\r
+        public Func<ItemStatus, ItemStatus> GetItem { get; set; } = item => item;\r
+\r
+        public IReadOnlyList<ItemStatus> Slot\r
+        {\r
+            get => _slot.Select(item => GetItem(item)).ToList();\r
+            set => _slot = value.ToList();\r
+        }\r
+\r
+        public ItemStatus SlotEx\r
+        {\r
+            get => GetItem(_slotEx);\r
+            set => _slotEx = value;\r
+        }\r
+\r
+        public void FreeSlot(int idx) => _slot[idx] = new ItemStatus();\r
+\r
         public IEnumerable<ItemStatus> AllSlot => SlotEx.Id == 0 ? Slot : Slot.Concat(new[] {SlotEx});\r
 \r
         public ShipStatus()\r
index 7c11e18..820959c 100644 (file)
@@ -155,7 +155,7 @@ namespace KancolleSniffer
                     sb.Append(\r
                         $"\"s{s + 1}\":{{\"id\":\"{ship.Spec.Id}\",\"lv\":{ship.Level},\"luck\":{ship.Lucky},\"items\":{{");\r
                     var items = ship.Slot;\r
-                    for (var i = 0; i < items.Length; i++)\r
+                    for (var i = 0; i < items.Count; i++)\r
                     {\r
                         var item = items[i];\r
                         if (item.Empty)\r
index e3e9885..c0b9b3b 100644 (file)
@@ -262,7 +262,7 @@ namespace KancolleSniffer.View
         private string GetEqipString(ShipStatus ship)\r
         {\r
             var result =\r
-            (from i in Enumerable.Range(0, ship.Slot.Length)\r
+            (from i in Enumerable.Range(0, ship.Slot.Count)\r
                 let item = ship.Slot[i]\r
                 where !item.Empty\r
                 select item.Spec.Name + (item.Spec.IsAircraft && ship.OnSlot.Length > 0 && ship.Spec.MaxEq.Length > 0\r
index 7ab2eac..484b6bf 100644 (file)
@@ -98,7 +98,7 @@ namespace KancolleSniffer.View
                 foreach (var s in fleet.Ships)\r
                 {\r
                     var equips = new List<Record>();\r
-                    for (var i = 0; i < s.Slot.Length; i++)\r
+                    for (var i = 0; i < s.Slot.Count; i++)\r
                     {\r
                         var item = s.Slot[i];\r
                         var onslot = s.OnSlot[i];\r