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

        /* 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);
        }
Ejemplo n.º 3
0
        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));
        }