From 8c1184fced045f133de6cc7fe55deb38e1884812 Mon Sep 17 00:00:00 2001
From: client_linchunjie <461730578@qq.com>
Date: 星期六, 13 四月 2019 11:30:50 +0800
Subject: [PATCH] Merge branch 'master' into HazyRegion

---
 System/MainWin/SkillButton.cs |  327 +++++++++++++++++++++++++++++++++++++----------------
 1 files changed, 226 insertions(+), 101 deletions(-)

diff --git a/System/MainWin/SkillButton.cs b/System/MainWin/SkillButton.cs
index 6732b95..9866027 100644
--- a/System/MainWin/SkillButton.cs
+++ b/System/MainWin/SkillButton.cs
@@ -6,7 +6,6 @@
 using System.Collections;
 using System.Collections.Generic;
 using UnityEngine.UI;
-
 using UnityEngine.EventSystems;
 using UnityEngine.Events;
 
@@ -28,64 +27,32 @@
 
     public class SkillButton : SkillButtonInterface, IPointerExitHandler
     {
+        [SerializeField] int m_Index;
         [SerializeField] SkillTurnplate m_SkillTurnplate;
-        [SerializeField] Image m_Icon;
-        public Image icon { get { return m_Icon; } }
+        [SerializeField] ImageEx m_Icon;
         [SerializeField] Transform m_Locked;
-        public Transform locked
-        {
-            get
-            {
-                return m_Locked;
-            }
-        }
-
         [SerializeField] Text m_CoolDown;
         [SerializeField] Image m_CoolDownMask;
         [SerializeField] ScaleTween m_ScaleTween;
+        [SerializeField] Image m_Selected;
+        [SerializeField] LongPressShowPanel m_SkillTip;
 
-        [Header("閬僵鏄惁鍙嶅悜")]
-        public bool Isreverse = false;
+        public Image icon { get { return m_Icon; } }
+        public Transform locked { get { return m_Locked; } }
+
         UIEvent skillEvent1 = new UIEvent();
         UIEvent skillEvent2 = new UIEvent();
 
         bool isExit = false;
 
-        float m_TotalCoolDown = 0f;
-        public float totalCoolDown
-        {
-            get
-            {
-                return m_TotalCoolDown;
-            }
-            set
-            {
-                m_TotalCoolDown = value;
-            }
-        }
-
-        float m_CoolDownCompleteTime = 0f;
-        public float coolDownCompleteTime
-        {
-            get
-            {
-                return m_CoolDownCompleteTime;
-            }
-            set
-            {
-                m_CoolDownCompleteTime = value;
-            }
-        }
-
+        bool inCountDown = false;
         float timer = 0f;
-        PlayerSkillData m_SkillData = null;
-        Skill skillBuf = null;
-        float fillAmountRevise = 1f;
+        int skillId = 0;
 
-        public void SetSkillData(PlayerSkillData _skillData)
+        public void Initialize(int skillId)
         {
-            m_SkillData = _skillData;
-            if (m_SkillData == null)
+            this.skillId = skillId;
+            if (this.skillId == 0)
             {
                 locked.gameObject.SetActive(true);
                 m_Icon.gameObject.SetActive(false);
@@ -98,30 +65,32 @@
                     locked.gameObject.SetActive(false);
                     m_Icon.gameObject.SetActive(true);
                 }
-                var skillConfig = m_SkillData.skillCfg;
+
+                var skillConfig = SkillConfig.Get(this.skillId);
                 m_Icon.SetSprite(skillConfig.IconName);
-
-                if (skillBuf != null)
-                {
-                    skillBuf.RefreshCD -= OnSkillCDRefresh;
-                }
-
-                if (PlayerDatas.Instance.hero != null)
-                {
-                    skillBuf = PlayerDatas.Instance.hero.SkillMgr.Get(m_SkillData.id);
-                    OnSkillCDRefresh(skillBuf.cd, skillBuf.skillInfo.config.CoolDownTime * Constants.F_GAMMA);
-                    skillBuf.RefreshCD += OnSkillCDRefresh;
-                }
             }
 
+            DisplaySkillDynamicInfo(true);
+            m_Selected.gameObject.SetActive(false);
+            HideSkillTip();
+
+            this.enabled = true;
         }
 
         public void Dispose()
         {
-            if (skillBuf != null)
+            if (showSkillTipClock != null)
             {
-                skillBuf.RefreshCD -= OnSkillCDRefresh;
+                Clock.Stop(showSkillTipClock);
+                showSkillTipClock = null;
             }
+
+            if (m_Index != 0)
+            {
+                HideSkillTip();
+            }
+
+            this.enabled = false;
         }
 
         public void AddDownListener(UnityAction _action)
@@ -140,72 +109,55 @@
             skillEvent2.RemoveAllListeners();
         }
 
-        /// <summary>
-        /// 鍓╀綑CD鍜屾�籆D閮芥槸姣
-        /// </summary>
-        /// <param name="_cd"></param>
-        /// <param name="_totalCD"></param>
-        private void OnSkillCDRefresh(float _cd, float _totalCD)
-        {
-            totalCoolDown = _totalCD;
-            coolDownCompleteTime = Time.time + _cd;
-            timer = 0f;
-        }
-
         private void LateUpdate()
         {
-            if (m_CoolDownCompleteTime > Time.time)
+            DisplaySkillDynamicInfo(false);
+
+            if (inCountDown)
             {
-                var cd = m_CoolDownCompleteTime - Time.time;
-                if (!m_CoolDown.gameObject.activeInHierarchy)
+                if (!m_CoolDown.gameObject.activeSelf)
                 {
                     m_CoolDown.gameObject.SetActive(true);
                 }
 
-                if (m_CoolDownMask != null && !m_CoolDownMask.gameObject.activeInHierarchy)
+                if (m_CoolDownMask != null && !m_CoolDownMask.gameObject.activeSelf)
                 {
                     m_CoolDownMask.gameObject.SetActive(true);
                 }
 
                 if (m_CoolDownMask != null)
                 {
-                    if (Isreverse)
-                    {
-                        float flo = cd / totalCoolDown;
-                        m_CoolDownMask.fillAmount = 1.0f - flo;
-                    }
-                    else
-                    {
-                        m_CoolDownMask.fillAmount = cd / totalCoolDown;
-                    }
+                    m_CoolDownMask.fillAmount = MainWinSkillController.Instance.GetSkillCD(m_Index).value.GetCountDownFillAmount();
                 }
 
                 timer -= Time.deltaTime;
                 if (timer < 0f)
                 {
-                    m_CoolDown.text = cd.ToString("f0");
+                    var countDown = MainWinSkillController.Instance.GetSkillCD(m_Index).value.GetCountDown();
+                    if (countDown > 1)
+                    {
+                        m_CoolDown.text = countDown.ToString("f0");
+                    }
+                    else
+                    {
+                        m_CoolDown.text = "";
+                    }
+
                     timer += 1f;
                 }
             }
             else
             {
-                if (m_CoolDown.gameObject.activeInHierarchy)
+                if (m_CoolDown.gameObject.activeSelf)
                 {
                     m_CoolDown.gameObject.SetActive(false);
                 }
 
                 if (m_CoolDownMask != null)
                 {
-                    if (Isreverse)
+                    if (m_CoolDownMask.gameObject.activeSelf)
                     {
-                        m_CoolDownMask.fillAmount = 1;
-                    }
-                    else
-                    {
-                        if (m_CoolDownMask.gameObject.activeInHierarchy)
-                        {
-                            m_CoolDownMask.gameObject.SetActive(false);
-                        }
+                        m_CoolDownMask.gameObject.SetActive(false);
                     }
                 }
 
@@ -216,21 +168,34 @@
         public override void OnPointerDown(PointerEventData eventData)
         {
             base.OnPointerDown(eventData);
-
+            ProcessForbid();
             PassEvent(eventData, ExecuteEvents.pointerDownHandler);
 
-            if (m_SkillData == null)
+            if (this.skillId == 0)
             {
                 return;
             }
+
             if (m_ScaleTween != null)
             {
                 m_ScaleTween.Play();
             }
 
-            skillEvent1.Invoke();
-            isExit = false;
+            m_Selected.gameObject.SetActive(true);
 
+            skillEvent1.Invoke();
+
+            if (m_Index != 0)
+            {
+                if (showSkillTipClock != null)
+                {
+                    Clock.Stop(showSkillTipClock);
+                }
+
+                showSkillTipClock = Clock.AlarmAfter(1, ShowSkillTip);
+            }
+
+            isExit = false;
         }
 
         public override void OnPointerUp(PointerEventData eventData)
@@ -239,18 +204,32 @@
 
             PassEvent(eventData, ExecuteEvents.pointerUpHandler);
 
-            if (m_SkillData == null)
+            if (this.skillId == 0)
             {
                 return;
             }
+
             if (m_ScaleTween != null)
             {
                 m_ScaleTween.Play(true);
             }
 
+            m_Selected.gameObject.SetActive(false);
+
             if (isExit == false)
             {
                 skillEvent2.Invoke();
+            }
+
+            if (showSkillTipClock != null)
+            {
+                Clock.Stop(showSkillTipClock);
+                showSkillTipClock = null;
+            }
+
+            if (m_Index != 0)
+            {
+                HideSkillTip();
             }
         }
 
@@ -283,6 +262,152 @@
             }
 
         }
+
+        private void Awake()
+        {
+            Skill.OnSkillCDFinished += OnSkillPrepared;
+            Skill.OnSkillCast += OnSkillCast;
+        }
+
+        private void OnDestroy()
+        {
+            Skill.OnSkillCDFinished += OnSkillPrepared;
+            Skill.OnSkillCast += OnSkillCast;
+        }
+
+        private void OnSkillPrepared(int skillId)
+        {
+            if (!this.enabled)
+            {
+                return;
+            }
+
+            if (this.skillId != skillId)
+            {
+                return;
+            }
+
+            EffectMgr.Instance.PlayUIEffect(1024, 1500, this.transform, false);
+        }
+
+        private void OnSkillCast(uint playerInstanceId, int skillId)
+        {
+            if (!this.enabled)
+            {
+                return;
+            }
+
+            if (playerInstanceId != PlayerDatas.Instance.PlayerId)
+            {
+                return;
+            }
+
+            if (this.skillId != skillId)
+            {
+                return;
+            }
+
+            EffectMgr.Instance.PlayUIEffect(1023, 1500, this.transform, false);
+        }
+
+        private void ProcessForbid()
+        {
+            var isUnLocked = this.skillId != 0;
+            if (!isUnLocked)
+            {
+                switch (m_Index)
+                {
+                    case 1:
+                        SysNotifyMgr.Instance.ShowTip("Skill1Btn_Unlock");
+                        break;
+                    case 2:
+                        SysNotifyMgr.Instance.ShowTip("Skill2Btn_Unlock");
+                        break;
+                    case 3:
+                        SysNotifyMgr.Instance.ShowTip("Skill3Btn_Unlock");
+                        break;
+                    case 4:
+                        SysNotifyMgr.Instance.ShowTip("Skill4Btn_Unlock");
+                        break;
+                    case 5:
+                        SysNotifyMgr.Instance.ShowTip("Skill5Btn_Unlock");
+                        break;
+                    case 6:
+                        SysNotifyMgr.Instance.ShowTip("Skill6Btn_Unlock");
+                        break;
+                    case 7:
+                        SysNotifyMgr.Instance.ShowTip("Skill7Btn_Unlock");
+                        break;
+                    case 8:
+                        SysNotifyMgr.Instance.ShowTip("SkillXpBtn_Unlock");
+                        break;
+                }
+
+                return;
+            }
+
+            if (PlayerDatas.Instance.hero == null)
+            {
+                return;
+            }
+
+            var skill = PlayerDatas.Instance.hero.SkillMgr.Get(this.skillId);
+            if (!skill.IsValid())
+            {
+                SysNotifyMgr.Instance.ShowTip("SkillBtn_CD");
+                return;
+            }
+        }
+
+        Clock showSkillTipClock;
+        private void ShowSkillTip()
+        {
+            if (this.skillId == 0)
+            {
+                return;
+            }
+
+            if (m_SkillTip)
+            {
+                m_SkillTip.gameObject.SetActive(true);
+                m_SkillTip.Display(this.skillId);
+            }
+        }
+
+        private void HideSkillTip()
+        {
+            if (m_SkillTip)
+            {
+                m_SkillTip.gameObject.SetActive(false);
+            }
+        }
+
+        private void DisplaySkillDynamicInfo(bool force)
+        {
+            var skillCd = MainWinSkillController.Instance.GetSkillCD(m_Index);
+            if (force || skillCd.dirty)
+            {
+                var data = skillCd.Fetch();
+                inCountDown = data.IsCountDown();
+
+                var countDown = MainWinSkillController.Instance.GetSkillCD(m_Index).value.GetCountDown();
+                if (countDown > 0)
+                {
+                    m_CoolDown.text = countDown.ToString("f0");
+                }
+                else
+                {
+                    m_CoolDown.text = "";
+                }
+            }
+
+            var skillForbid = MainWinSkillController.Instance.GetSkillForbid(m_Index);
+            if (force || skillForbid.dirty)
+            {
+                m_Icon.gray = skillForbid.Fetch();
+            }
+        }
+
     }
 
 }

--
Gitblit v1.8.0