/// <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); }
/// <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); }