public bool DoCombineRecipe(ICombineRecipe pRecipe, IEnumerable <ICombineMaterial> arrMaterial) { if (Check_Recipe_IsEnoughMaterial(pRecipe, arrMaterial) == false) { return(false); } foreach (ICombineMaterial pMaterial in arrMaterial) { IRequireCombineMaterialData pRequireCombinationMaterial = pRecipe.arrRequireMaterialData.Where(p => p.IRequireMaterialKey == pMaterial.strCombineMaterialKey).FirstOrDefault(); if (pRequireCombinationMaterial == null) { continue; } if (pMaterial.iMaterialCount < pRequireCombinationMaterial.iRequireCount) { continue; } pMaterial.iMaterialCount -= pRequireCombinationMaterial.iRequireCount; } return(pRecipe.ICombineRecipe_Combine(arrMaterial)); }
// ========================================================================== // /* protected - [Override & Unity API] */ /* protected - [abstract & virtual] */ // ========================================================================== // #region Private private bool Check_Recipe_IsEnoughMaterial(ICombineRecipe pRecipe, IEnumerable <ICombineMaterial> arrMaterial) { bool bIsPossible = pRecipe.arrRequireMaterialData.Select(p => p.IRequireMaterialKey).Intersect(_setMaterialKey).Count() == pRecipe.arrRequireMaterialData.Count(); if (bIsPossible) { bIsPossible = pRecipe.ICombineRecipe_IsPossibleCombine(arrMaterial); } return(bIsPossible); }
public bool DoCombineRandom(IEnumerable <ICombineMaterial> arrMaterial, out ICombineRecipe pRecipe, System.Func <ICombineRecipe, int> OnGetRandomPercent = null) { pRecipe = null; ICombineRecipe[] arrRecipe; if (DoGet_Possible_CombineRecipeArray(arrMaterial, out arrRecipe) == false) { return(false); } pRecipe = OnGetRandomPercent != null?arrRecipe.GetRandomItem(OnGetRandomPercent) : arrRecipe.GetRandomItem(); if (pRecipe == null) { return(false); } return(DoCombineRecipe(pRecipe, arrMaterial)); }