private static List <Item> GetAvailableItemsRecursive(ref List <Item> inventoryState, ItemRecipe recipe) { var result = new List <Item>(); var tmpRecipe = recipe.GetItems(); foreach (var component in tmpRecipe) { if (component == null) { continue; } var idx = inventoryState.FindIndex(i => i != null && i.ItemType == component); if (idx == -1) { result = result.Concat(GetAvailableItemsRecursive(ref inventoryState, component.Recipe)).ToList(); } else { result.Add(inventoryState[idx]); // remove entry in case that the recipe has the same item more than once in it inventoryState[idx] = null; } } return(result); }
private void CreateRecipe(ItemManager manager) { Recipe = ItemRecipe.FromItemType(this, manager); }
public List <Item> GetAvailableItems(ItemRecipe recipe) { var tempInv = new List <Item>(_inventory.GetBaseItems()); return(GetAvailableItemsRecursive(ref tempInv, recipe)); }