/// <summary>
        /// effectue le craft dans l'inventaire</br>
        /// enleve les items du craft dans l'inventaire</br>
        /// ajoute l'item crafter dans l'inventaire du joueur</br>
        /// reset si plus de place
        /// </summary>
        /// <param name="inv"></param>
        /// <param name="joueur"></param>
        /// <returns></returns>
        public static bool CraftIt(Inventaire inv, Joueur joueur)
        {
            foreach (Craft craft in Craft.crafts)
            {
                if (Check(inv, craft))
                {
                    Item cl = craft.To.Clone();
                    int  i  = joueur.AjouterItem(cl);
                    if (i > 0)
                    {
                        Item cl2 = craft.To.Clone();
                        cl2.Quantite -= i;
                        joueur.EnleverItem(cl2);
                    }
                    else
                    {
                        int longueur = inv.Longueur;
                        int hauteur  = inv.Hauteur;

                        //max 3x3
                        if (longueur > 3)
                        {
                            longueur = 3;
                        }
                        if (hauteur > 3)
                        {
                            hauteur = 3;
                        }

                        for (int x = 0; x < longueur; x++)
                        {
                            for (int y = 0; y < hauteur; y++)
                            {
                                int  slot = x + (y * longueur);
                                Item it   = inv.GetItem(slot);
                                if (it != null)
                                {
                                    it.Quantite -= craft.From[x, y].Quantite;
                                    if (it.Quantite == 0)
                                    {
                                        inv.SetItem(slot, null);
                                    }
                                }
                            }
                        }
                        return(true);
                    }
                }
            }
            return(false);
        }
Exemple #2
0
        /// <summary>
        /// Met a jour ce qui est dans le four</br>
        /// fait cuire les items
        /// </summary>
        public void Update()
        {
            //dessus
            Item it1 = inventaire.GetItem(0);
            //dessous
            Item it2 = inventaire.GetItem(1);
            //resultat
            Item it3 = inventaire.GetItem(2);

            //s'il a des item a cuire
            if (it1 != null)
            {
                if (it1 is Cuisable cuit)
                {
                    //si le four peut sortir les items
                    if (it3 == null ||
                        (it3.id() == cuit.CuitEn().id() &&
                         it3.Quantite + cuit.CuitEn().Quantite <= it3.MaxQuantite))
                    {
                        while (true)
                        {
                            //s'il ne rest plus d'item a cuire
                            if (it1.Quantite == 0)
                            {
                                inventaire.SetItem(0, null);
                                break;
                            }
                            if (it1 is Cuisable cui)
                            {
                                //s'il reste du carburant
                                if (cui.TempsDeCuisson() <= carburant)
                                {
                                    it1.Quantite--;
                                    carburant -= cui.TempsDeCuisson();
                                    //l'ajoute
                                    if (it3 == null)
                                    {
                                        inventaire.SetItem(2, cui.CuitEn().Clone());
                                        it3 = inventaire.GetItem(2);
                                    }
                                    else
                                    {
                                        it3.Quantite += cui.CuitEn().Quantite;
                                        if (it3.Quantite + cui.CuitEn().Quantite > it3.MaxQuantite)
                                        {
                                            break;
                                        }
                                    }
                                    continue;
                                }
                                else
                                {
                                    if (it2 == null)
                                    {
                                        //s'arrete s'il ne reste plus de carburant meme dans le slot des carburant
                                        break;
                                    }
                                    if (it2 is Brulable bru)
                                    {
                                        carburant += bru.ProduitTemperature();
                                        it2.Quantite--;
                                        if (it2.Quantite == 0)
                                        {
                                            inventaire.SetItem(1, null);
                                            it2 = null;
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }