Exemple #1
0
    /// <summary>
    ///     Check whether the given recepie can be crafted by the inventory
    /// </summary>
    /// <param name="recepie"> The recepie to check </param>
    /// <returns> true if the recepie can be crafted, false if not </returns>
    public bool CanCraft(Recepie recepie)
    {
        foreach (var requiredItem in recepie.RequiredItems)
        {
            var materialStackEntry = Find(requiredItem.Item);

            if (materialStackEntry == null)
            {
                // Item isn't in inventory at all, can't craft
                Debug.LogWarning(string.Format("Can't craft {0}, {1} wasn't present at all",
                                               recepie.GetType().FullName, requiredItem.Item.GetType().FullName));
                return(false);
            }

            if (materialStackEntry.Count < requiredItem.Count)
            {
                // Don't have enough of that item to craft
                Debug.LogWarning(string.Format("Can't craft {0}, didnt have enough of {1}",
                                               recepie.GetType().FullName, requiredItem.Item.GetType().FullName));
                return(false);
            }
        }

        return(true);
    }
Exemple #2
0
    /// <summary>
    ///     Attempt to craft the given recepie
    /// </summary>
    /// <param name="recepie"> The recepie to craft </param>
    /// <returns> true if the recpie was crafted successfully, false if not </returns>
    public bool Craft(Recepie recepie)
    {
        if (!CanCraft(recepie))
        {
            Debug.LogWarning(string.Format("Tried to craft {0} but check failed", recepie.Produces.GetType().FullName));
            return(false);
        }

        foreach (var requiredItem in recepie.RequiredItems)
        {
            for (int i = 0; i < requiredItem.Count; i++)
            {
                if (!Remove(requiredItem.Item))
                {
                    // Something bad happened
                    Debug.LogWarning(string.Format("While trying to craft {0}, failed to remove one {1} from inventory",
                                                   recepie.GetType().FullName, requiredItem.Item.GetType().FullName));
                    return(false);
                }
            }
        }

        Add(recepie.Produces);
        return(true);
    }