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
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
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
{\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
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
\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
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
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
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