/// <summary>
        /// 初始化主动技能按钮
        /// </summary>
        public void SetUpActiveSkillButtons()
        {
            for (int i = 0; i < activeSkillButtonContainer.childCount; i++)
            {
                ActiveSkillButton activeSkillButton = activeSkillButtonContainer.GetChild(i).GetComponent <ActiveSkillButton>();

                float coolenPercentage = activeSkillButton.mask.fillAmount;
                player.attachedActiveSkills[i].coolenPercentage = (int)(coolenPercentage * 100);
            }

            for (int i = 0; i < activeSkillButtonContainer.childCount; i++)
            {
                activeSkillButtonContainer.GetChild(i).GetComponent <ActiveSkillButton>().Reset();
            }

            activeSkillButtonPool.AddChildInstancesToPool(activeSkillButtonContainer);


            if (bpCtr.towards == MyTowards.Left || bpCtr.towards == MyTowards.Right)
            {
                for (int i = 0; i < player.attachedActiveSkills.Count; i++)
                {
                    ActiveSkill       skill             = player.attachedActiveSkills[i];
                    ActiveSkillButton activeSkillButton = activeSkillButtonPool.GetInstance <ActiveSkillButton>(activeSkillButtonModel.gameObject, activeSkillButtonContainer);
                    int index = i;
                    //Debug.LogFormat("skill:{0},coolenPercentage:{1}", player.attachedActiveSkills[i].skillName, player.attachedActiveSkills[i].coolenPercentage);
                    activeSkillButton.SetUpActiveSkillButton(skill, index, activeSkillButtonContainer);
                    activeSkillButton.AddListener(OnActiveSkillButtonClick);
                }
            }
        }
        /// <summary>
        /// 战斗过程中如果遗忘技能,需要将该主动技能的按钮移除
        /// </summary>
        public void RemoveActiveSkillButton(Skill skill)
        {
            for (int i = 0; i < activeSkillButtonContainer.childCount; i++)
            {
                ActiveSkillButton activeSkillButton = activeSkillButtonContainer.GetChild(i).GetComponent <ActiveSkillButton>();

                if (activeSkillButton.skill.skillId == skill.skillId)
                {
                    activeSkillButton.Reset();
                    activeSkillButtonPool.AddInstanceToPool(activeSkillButton.gameObject);
                }
            }

            // 移除技能按钮时要更新技能按钮的点击响应,因为响应方法中有一个序号参数需要更新
            //(进入战斗初始化的时候按照技能顺序给按钮定了序号,点击时根据序号参数获得使用的是哪个技能,遗忘技能后该序号参数应该也更新一次)
            for (int i = 0; i < player.attachedActiveSkills.Count; i++)
            {
                ActiveSkill       activeSkill       = player.attachedActiveSkills[i];
                ActiveSkillButton activeSkillButton = activeSkillButtonContainer.GetChild(i).GetComponent <ActiveSkillButton>();
                int index = i;

                float coolenPercentage = activeSkillButton.mask.fillAmount;
                activeSkill.coolenPercentage = (int)(coolenPercentage * 100);


                activeSkillButton.SetUpActiveSkillButton(activeSkill, index, activeSkillButtonContainer);
                activeSkillButton.AddListener(OnActiveSkillButtonClick);
            }
        }
        public void InitAllActiveSkillButtons()
        {
            for (int i = 0; i < activeSkillButtonContainer.childCount; i++)
            {
                ActiveSkillButton activeSkillButton = activeSkillButtonContainer.GetChild(i).GetComponent <ActiveSkillButton>();

                activeSkillButton.validTint.gameObject.SetActive(false);

                activeSkillButton.Reset();
            }
        }
        /// <summary>
        /// 玩家角色的攻击动作结束时更新技能的可点击状态
        /// </summary>
        public void UpdateActiveSkillButtonsWhenAttackAnimFinish()
        {
            for (int i = 0; i < activeSkillButtonContainer.childCount; i++)
            {
                ActiveSkillButton activeSkillButton = activeSkillButtonContainer.GetChild(i).GetComponent <ActiveSkillButton>();

                ActiveSkill activeSkill = player.attachedActiveSkills[i];
                //float coolenPercentage = activeSkillButton.mask.fillAmount;

                activeSkillButton.UpdateActiveSkillButton(activeSkill);
            }
        }
Exemplo n.º 5
0
        public void AddListener(SkillButtonClickCallBack cb)
        {
            button.onClick.RemoveAllListeners();

            button.onClick.AddListener(delegate {
                mask.fillAmount     = 1.0f;
                mask.enabled        = true;
                button.interactable = false;

                skill.skillStatus = ActiveSkillStatus.Cooling;

                cb(indexInPanel);

                if (maskTweener != null)
                {
                    maskTweener.Kill();
                }

                validTint.gameObject.SetActive(false);

                maskTweener = mask.DOFillAmount(0, skill.skillCoolenTime).OnComplete(delegate {
                    bool isManaEnough = Player.mainPlayer.mana >= skill.manaConsume;

                    if (ExploreManager.Instance.battlePlayerCtr.isInSkillAttackAnimBeforeHit)
                    {
                        mask.enabled           = true;
                        mask.fillAmount        = 1;
                        skill.coolenPercentage = 0;
                        button.interactable    = false;
                        skill.skillStatus      = ActiveSkillStatus.Waiting;
                        validTint.gameObject.SetActive(false);
                    }
                    else
                    {
                        mask.enabled           = !isManaEnough;
                        mask.fillAmount        = 0;
                        skill.coolenPercentage = 0;
                        button.interactable    = isManaEnough;
                        skill.skillStatus      = ActiveSkillStatus.None;
                        if (isManaEnough)
                        {
                            if (!validTint.gameObject.activeInHierarchy)
                            {
                                validTint.gameObject.SetActive(true);
                            }
                            if (!validTint.animation.isPlaying)
                            {
                                validTint.animation.Play("default", 0);
                            }
                        }
                        else
                        {
                            validTint.gameObject.SetActive(false);
                        }
                    }

                    manaConsume.color = isManaEnough ? Color.white : Color.red;
                });


                for (int i = 0; i < skillButtonContainer.childCount; i++)
                {
                    ActiveSkill activeSkill = Player.mainPlayer.attachedActiveSkills[i];

                    if (activeSkill.skillId == skill.skillId)
                    {
                        continue;
                    }

                    ActiveSkillButton activeSkillButton = skillButtonContainer.GetChild(i).GetComponent <ActiveSkillButton>();

                    bool manaEnough = Player.mainPlayer.mana >= activeSkill.manaConsume;

                    activeSkillButton.manaConsume.color = manaEnough ? Color.white : Color.red;

                    if (activeSkill.skillStatus != ActiveSkillStatus.Cooling)
                    {
                        activeSkillButton.mask.enabled        = true;
                        activeSkillButton.button.interactable = false;
                        activeSkillButton.mask.fillAmount     = 1f;
                        activeSkill.coolenPercentage          = 100;
                        activeSkill.skillStatus = ActiveSkillStatus.Waiting;
                    }

                    activeSkillButton.validTint.gameObject.SetActive(false);
                }
            });
        }