Example #1
0
        public override void HandleHover(SpriteBatch sb, int slot)
        {
            base.HandleHover(sb, slot);
            if (IsBlankItem(item))
            {
                return;
            }

            ContainerRecipe cr    = (ContainerRecipe)container;
            List <Slot>     slots = cr.GetMaterialSlots();

            for (int i = 0; i < recipe.requiredItem.Length; i++)
            {
                slots[i].item  = recipe.requiredItem[i].CloneItem();
                slots[i].pos.X = pos.X + size.X + 6;
            }
        }
Example #2
0
        public override void HandleLeftMouse(SpriteBatch sb, int slot)
        {
            if (!canPick)
            {
                return;
            }
            if (recipe == null || IsBlankItem(recipe.createItem))
            {
                return;
            }
            if (!IsBlankItem(Main.mouseItem) && !recipe.createItem.IsTheSameAs(Main.mouseItem))
            {
                return;
            }
            if (!Main.mouseLeftRelease)
            {
                return;
            }

            if (IsBlankItem(Main.mouseItem))
            {
                Main.mouseItem       = (Item)recipe.createItem.Clone();
                Main.mouseItem.stack = 0;
            }
            if (Main.mouseItem.stack + recipe.createItem.stack > Main.mouseItem.maxStack)
            {
                return;
            }

            if (Main.keyState.IsKeyDown(Microsoft.Xna.Framework.Input.Keys.LeftShift))
            {
                ContainerRecipe cr = (ContainerRecipe)container;
                while (true)
                {
                    Main.mouseItem.stack += recipe.createItem.stack;
                    if (Main.mouseItem.maxStack == 1)
                    {
                        Main.mouseItem.Prefix(-1);
                    }
                    recipe.Create(Main.mouseItem);
                    Recipe.FindRecipes();

                    if (Main.mouseItem.stack + recipe.createItem.stack > Main.mouseItem.maxStack)
                    {
                        break;
                    }

                    bool canContinue = false;
                    for (int i = 0; i < cr.filtered.Count; i++)
                    {
                        if (IsRecipeTheSame(recipe, cr.filtered[i].recipe))
                        {
                            canContinue = true;
                            break;
                        }
                    }

                    if (!canContinue)
                    {
                        break;
                    }
                }

                Main.mouseItem = Main.player[Main.myPlayer].GetItem(Main.myPlayer, Main.mouseItem);
            }
            else
            {
                Main.mouseItem.stack += recipe.createItem.stack;
                if (Main.mouseItem.maxStack == 1)
                {
                    Main.mouseItem.Prefix(-1);
                }
                recipe.Create(Main.mouseItem);
                Recipe.FindRecipes();
            }
        }