private IEnumerable<InventoryItem> _GetAttachedItems(InventoryItem item)
{
yield return item;
if (item.GameData_Item != null && item.GameData_Item.Ports != null)
{
var children = (from gamePort in item.GameData_Item.Ports.Items
where item.Inventory_Item.Ports.Items != null
from shipPort in item.Inventory_Item.Ports.Items
where shipPort.PortName == gamePort.Name
let shipItem = this.Inventory_ItemMap.GetValue(shipPort.ItemID, null)
let gameItem = this.GameData_ItemMap.GetValue(shipPort.ItemID, null)
select new InventoryItem
{
// Top level parent item
Inventory_EquippedItem = item.Inventory_Item,
GameData_EquippedItem = item.GameData_Item,
// Top level parent port
Inventory_EquippedPort = shipPort,
GameData_EquippedPort = gamePort,
// Parent ship
Inventory_Ship = item.Inventory_Ship,
GameData_Ship = item.GameData_Ship,
// Child item
Inventory_Item = shipItem,
GameData_Item = gameItem,
});
foreach (var childItem in children.SelectMany(c => this._GetAttachedItems(c)))
yield return childItem;
}
}