Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }