Esempio n. 1
0
    public bool CraftItem(ResourceInventory ResourceInv, InventoryController SourceInv, InventoryController TargetInv, Recipe CraftRecipe, bool ByPassCraftCheck = false)
    {
        if (!ByPassCraftCheck) //optimization to skip checking if we can craft this recipe
        {
            if (!CanCraft(ResourceInv, SourceInv, TargetInv, CraftRecipe))
            {
                return(false);
            }
        }
        foreach (var itemIn in CraftRecipe.ItemInput) //TODO Optimize data structure to allow use of a single foreach for inputs
        {
            SourceInv.RemoveFromItemBucket(itemIn.item, itemIn.amount);
        }
        foreach (var resourceIn in CraftRecipe.ResourceInput)
        {
            ResourceInv.RemoveResource(resourceIn.resource, resourceIn.amount);
        }

        TargetInv.AddToItemBucket(CraftRecipe.Output.item, CraftRecipe.Output.amount);

        if (!CraftRecipe.CreatesByProducts)
        {
            return(true);
        }

        foreach (var itemOut in CraftRecipe.ItemByProducts)//TODO Optimize data structure to allow use of a single foreach for outputs
        {
            TargetInv.AddToItemBucket(itemOut.item, itemOut.amount);
        }
        foreach (var resOut in CraftRecipe.ResourceByProducts)
        {
            ResourceInv.AddResource(resOut.resource, resOut.amount);
        }
        return(true);
    }