public static Recipe XmlNodeToRecipe(XmlNode recipeData) { if (recipeData?.Attributes is null) { throw new ArgumentNullException(nameof(recipeData), "Crafting data cannot be null!"); } Recipe recipe = new Recipe(); XmlNodeList requirNodes = recipeData.SelectNodes("Material"); RecipeRequirement[] requirements = new RecipeRequirement[requirNodes?.Count ?? 0]; // Set the materials for (int i = 0; i < requirements.Length; i++) { RecipeRequirement req = new RecipeRequirement() { ItemId = int.Parse(requirNodes[i].Attributes["Id"]?.Value ?? "0"), Amount = int.Parse(requirNodes[i].Attributes["Amount"]?.Value ?? "0") }; requirements[i] = req; } recipe.OutputMultiplier = int.Parse(recipeData.Attributes["OutMultiplier"]?.Value ?? "0"); recipe.MaterialsNeeded = requirements; recipe.OutputId = int.Parse(recipeData.Attributes["Output"]?.Value ?? "0"); return(recipe); }
public int Calculate(sItem[] items) { Span <int> temp = stackalloc int[MaterialsNeeded.Length]; int lowest = int.MaxValue; for (int i = 0; i < MaterialsNeeded.Length; i++) { RecipeRequirement requir = MaterialsNeeded[i]; temp[i] = items.Where(item => item.ItemId == requir.ItemId).FirstOrDefault().Amount / requir.Amount; lowest = Math.Min(lowest, temp[i]); } return(lowest != int.MaxValue ? lowest * OutputMultiplier : 0); }