Пример #1
0
        private void UseMenu_Selected(object sender, EventArgs e)
        {
            Global.game_system.play_se(System_Sounds.Confirm);

            var useMenu = (sender as ItemUseMenu);

            var actor     = useMenu.Actor;
            int itemIndex = useMenu.SelectedItem;
            var itemData  = actor.items[itemIndex];

            if (itemData.to_item.targets_inventory())
            {
                var repairWindow = useMenu.GetRepairWindow();
                var repairMenu   = new ItemRepairMenu(
                    actor.id, itemIndex, repairWindow, useMenu);
                repairMenu.Selected += RepairMenu_Selected;
                repairMenu.Canceled += RepairMenu_Canceled;
                AddMenu(repairMenu);

                useMenu.HideWindow();
            }
            else
            {
                Vector2 cursorLoc        = useMenu.CurrentCursorLoc;
                var     useConfirmWindow = UseConfirmMenu(cursorLoc);

                var useConfirmMenu = new ConfirmationMenu(useConfirmWindow);
                useConfirmMenu.Confirmed += UseConfirmMenu_Confirmed;
                useConfirmMenu.Canceled  += UseConfirmMenu_Canceled;
                AddMenu(useConfirmMenu);
            }
        }
Пример #2
0
        private void UseItem(
            ConfirmationMenu useConfirmMenu,
            ItemUseMenu useMenu,
            ItemRepairMenu repairMenu)
        {
            Game_Actor actor = useMenu.Actor;
            Data_Item  item  = useMenu.SelectedItemData.to_item;

            // Use -1 if nothing
            int inventoryTarget = -1;

            if (repairMenu != null)
            {
                inventoryTarget = repairMenu.SelectedItem;
            }

            // If promoting
            if (actor.PromotedBy(item))
            {
                // If there are multiple promotion choices
                if (actor.PromotedBy(item) &&
                    actor.NeedsPromotionMenu)
                {
                    Global.game_map.add_actor_unit(Constants.Team.PLAYER_TEAM, Config.OFF_MAP, actor.id, "");
                    var unit = Global.game_map.last_added_unit;

                    var promotionChoiceMenu = new PromotionChoiceMenu(unit);
                    promotionChoiceMenu.Selected  += PromotionChoiceMenu_Selected;
                    promotionChoiceMenu.Canceled  += PromotionChoiceMenu_Canceled;
                    promotionChoiceMenu.Closed    += menu_Closed;
                    promotionChoiceMenu.Confirmed += PromotionChoiceMenu_Confirmed;
                    AddMenu(promotionChoiceMenu);

                    var promotionMenuFadeIn = promotionChoiceMenu.FadeInMenu(false);
                    promotionMenuFadeIn.Finished += menu_Closed;
                    AddMenu(promotionMenuFadeIn);
                }
                else
                {
                    Promote(useMenu);
                }
            }
            else
            {
                RemoveTopMenu(useConfirmMenu);
                if (repairMenu != null)
                {
                    RemoveTopMenu(repairMenu);
                }

                Global.game_system.play_se(System_Sounds.Gain);
                Dictionary <Boosts, int> boosts = actor.item_boosts(item);
                // Apply item effect
                actor.item_effect(item, inventoryTarget);
                actor.recover_hp();

                useMenu.UseItem();
                useMenu.ShowWindow();
                if (item.is_stat_booster() || item.is_growth_booster())
                {
                    useMenu.CreateStatsPopup(item, boosts);
                }
                else if (item.can_repair)
                {
                    useMenu.CreateRepairPopup(inventoryTarget);
                }
            }
        }