少年修仙传客户端代码仓库
client_linchunjie
2018-08-27 d106f11e7f44c748f595da36e0cdfd54849649e6
System/Skill/SkillAccordWin.cs
@@ -1,508 +1,508 @@
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Friday, November 10, 2017
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using TableConfig;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class SkillAccordWin : Window
    {
        [SerializeField] FlipScroll flipActScroll;
        [SerializeField] RectTransform m_ContainerSkillDetails;
        [SerializeField] RectTransform m_ContainerUnselect;
        [SerializeField] Text m_TreasureNameTxt;
        [SerializeField] Text m_SkillNameTxt;
        [SerializeField] Text m_SkillCoolDownTxt;
        [SerializeField] Text m_SkillDescTxt;
        [SerializeField] Button m_LeftBtn;
        [SerializeField] Button m_RightBtn;
        [SerializeField] List<SkillCell> m_QuickSkills = new List<SkillCell>();
        [SerializeField] SkillCell m_XpSkill;
        [SerializeField] Image m_XpCoolDownImg;
        [SerializeField] Text m_XpCoolDownTxt;
        [SerializeField] Image m_DragImg;
        [SerializeField] Image m_DragSkillImg;
        [SerializeField] List<RectTransform> m_QuickSkillRect = new List<RectTransform>();
        [SerializeField] Button m_PageOneBtn;
        [SerializeField] Button m_PageTwoBtn;
        [SerializeField] SkillTurnplate m_SkillTurnplate;
        [SerializeField] Button m_AutoUseXp;
        [SerializeField] Image m_AutoXpCheck;
        private List<SkillConfig> skillListAct = new List<SkillConfig>();
        private bool onXpCoolDown = false;
        private bool m_IsAutoUseXp = false;
        SkillModel m_Model;
        SkillModel model
        {
            get
            {
                return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<SkillModel>());
            }
        }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            flipActScroll.OnRefreshData += OnRefreshActSkill;
            flipActScroll.OnTweenCompt += OnTweenCompt;
            m_LeftBtn.onClick.AddListener(flipActScroll.FlipLeft);
            m_RightBtn.onClick.AddListener(flipActScroll.FlipRight);
            m_AutoUseXp.onClick.AddListener(OnAutoUseXp);
            m_PageOneBtn.onClick.AddListener(() =>
            {
                if (m_SkillTurnplate.GroupIndex != 1)
                {
                    m_SkillTurnplate.Turn(GestureType.Left);
                    UpdateSkillPage();
                }
            });
            m_PageTwoBtn.onClick.AddListener(() =>
            {
                if (m_SkillTurnplate.GroupIndex != 2)
                {
                    m_SkillTurnplate.Turn(GestureType.Right);
                    UpdateSkillPage();
                }
            });
            for (int i = 0; i < m_QuickSkills.Count; i++)
            {
                int index = i;
                m_QuickSkills[i].skillData.m_SkillBtn.onClick.AddListener(() =>
                {
                    OnQuickSkillClick(index);
                });
            }
            m_XpSkill.skillData.m_SkillBtn.AddListener(() =>
            {
                OnXpClick();
            });
        }
        protected override void OnPreOpen()
        {
            model.presentSltSkillID = 0;
            flipActScroll.locked = false;
            m_DragImg.gameObject.SetActive(false);
            Input.multiTouchEnabled = false;
            PlayerSkillDatas.OnQuickSkillRefresh += OnUpdateQuickSkill;
            PlayerSkillDatas.OnRefreshSkill += OnRefreshSkill;
            model.OnRefreshSltSkill += OnUpdateQuickSkill;
            model.OnRefreshSltSkill += UpdateSltSkill;
            GetSkillList();
            OnUpdateQuickSkill();
            for (int i = 0; i < SkillModel.QUICK_SKILL_COUNT; i++)
            {
                if (PlayerDatas.Instance.skill.GetQuickSkillByPos(i) != null)
                {
                    OnQuickSkillClick(i);
                    break;
                }
            }
            m_SkillTurnplate.Init();
            UpdateSkillPage();
            RefreshXpSkill();
            m_IsAutoUseXp = model.AutoUseXp();
            UpdateAutoXp();
        }
        protected override void OnActived()
        {
            base.OnActived();
            UpdatePageBtn();
        }
        private void OnRefreshSkill()
        {
            UpdateSltSkill();
            RefreshXpSkill();
        }
        protected override void OnAfterOpen()
        {
            HandleAchievement();
        }
        protected override void OnPreClose()
        {
            model.skillDraging = false;
            m_DragImg.gameObject.SetActive(false);
            PlayerSkillDatas.OnQuickSkillRefresh -= OnUpdateQuickSkill;
            PlayerSkillDatas.OnRefreshSkill -= OnRefreshSkill;
            model.OnRefreshSltSkill -= UpdateSltSkill;
            model.OnRefreshSltSkill -= OnUpdateQuickSkill;
            AchievementGoto.achievementType = 0;
            Input.multiTouchEnabled = true;
        }
        protected override void OnAfterClose()
        {
            model.SetAutoUseXp(m_IsAutoUseXp);
        }
        #endregion
        private void OnTweenCompt()
        {
            UpdatePageBtn();
        }
        void UpdatePageBtn()
        {
            if (flipActScroll.Page == 0)
            {
                m_LeftBtn.gameObject.SetActive(false);
            }
            else
            {
                m_LeftBtn.gameObject.SetActive(true);
            }
            if (flipActScroll.Page == flipActScroll.pageCnt - 1)
            {
                m_RightBtn.gameObject.SetActive(false);
            }
            else
            {
                m_RightBtn.gameObject.SetActive(true);
            }
        }
        void OnRefreshActSkill(int page, RectTransform cell)
        {
            for (int i = 0; i < cell.childCount; i++)
            {
                Transform skillTran = cell.GetChild(i);
                int index = page * SkillModel.ACT_SKILL_NUM + i;
                if (index < skillListAct.Count)
                {
                    if(AchievementGoto.achievementType==AchievementGoto.ExcuteSkill
                        && skillListAct[index].SkillID == m_AchieveSkillId)
                    {
                        var _effect = AchievementGuideEffectPool.Require(3);
                        _effect.transform.SetParentEx(skillTran, Vector3.zero, Vector3.zero, Vector3.one);
                        (_effect.transform as RectTransform).anchoredPosition = Vector3.zero;
                        AchievementGoto.achievementType = 0;
                        m_AchieveSkillId = 0;
                    }
                    skillTran.gameObject.SetActive(true);
                    skillTran.GetComponent<SkillCell>().Refresh(skillListAct[index]);
                }
                else
                {
                    skillTran.gameObject.SetActive(false);
                }
            }
        }
        void OnUpdateSltSkillInfo()
        {
            SkillConfig cfg = ConfigManager.Instance.GetTemplate<SkillConfig>(model.presentSltSkillID);
            m_ContainerSkillDetails.gameObject.SetActive(cfg != null);
            m_ContainerUnselect.gameObject.SetActive(cfg == null);
            if (cfg != null)
            {
                m_SkillNameTxt.text = cfg.SkillName;
                m_TreasureNameTxt.text = cfg.Skillsource;
                m_SkillDescTxt.text = UIHelper.ReplaceNewLine(cfg.Description);
                m_SkillCoolDownTxt.text = cfg.CoolDownTime == 0 ? string.Empty : Language.Get("L1065", cfg.CoolDownTime / 1000);
            }
        }
        void GetSkillList()
        {
            var _skillJobKey = (int)Math.Pow(2, PlayerDatas.Instance.baseData.Job);
            if (!model.skillActDict.ContainsKey(_skillJobKey))
            {
                DesignDebug.LogErrorFormat("不存在该职业的技能{0}", _skillJobKey);
                return;
            }
            Dictionary<int, List<SkillConfig>> dic = model.skillActDict[_skillJobKey];
            Dictionary<int, PlayerSkillData> playerskills = PlayerDatas.Instance.skill.GetAllSkill();
            skillListAct.Clear();
            foreach (int key in dic.Keys)
            {
                List<SkillConfig> typeList = dic[key];
                SkillConfig lvCfg = typeList[0];
                foreach (SkillConfig cfg in typeList)
                {
                    if (PlayerDatas.Instance.skill.GetSKillById(cfg.SkillID) != null)
                    {
                        lvCfg = cfg;
                        break;
                    }
                }
                if (PlayerDatas.Instance.skill.GetFilterPlayerSkill(PlayerDatas.Instance.baseData.Job).Contains(lvCfg.SkillID))
                {
                    continue;
                }
                skillListAct.Add(lvCfg);
            }
            if (skillListAct.Count < 1)
            {
                return;
            }
            model.presentSltSkillID = skillListAct[0].SkillID;
            flipActScroll.pageCnt = Mathf.CeilToInt((float)skillListAct.Count / SkillModel.ACT_SKILL_NUM);
            UpdateSltSkill();
        }
        void OnUpdateQuickSkill()
        {
            int[] intarray = model.GetQuickBaseSkillArray(PlayerDatas.Instance.baseData.Job);
            for (int i = 0; i < m_QuickSkills.Count; i++)
            {
                PlayerSkillData data = PlayerDatas.Instance.skill.GetQuickSkillByPos(i);
                SkillConfig skillCfg = ConfigManager.Instance.GetTemplate<SkillConfig>(intarray[i]);
                if (data != null)
                {
                    m_QuickSkills[i].skillData.SetSkillData(data.id);
                    m_QuickSkills[i].skillData.SetActive(true);
                    m_QuickSkills[i].skillData.m_LockImg.gameObject.SetActive(false);
                }
                else
                {
                    m_QuickSkills[i].skillData.SetSkillData(skillCfg.SkillID);
                    m_QuickSkills[i].skillData.SetActive(false);
                    m_QuickSkills[i].skillData.m_LockImg.gameObject.SetActive(true);
                    if (PlayerDatas.Instance.skill.GetSKillById(intarray[i]) != null)
                    {
                        m_QuickSkills[i].skillData.m_LockImg.gameObject.SetActive(false);
                    }
                }
            }
        }
        private void OnQuickSkillClick(int _index)
        {
            PlayerSkillData skill = PlayerDatas.Instance.skill.GetQuickSkillByPos(_index);
            if (skill == null)
            {
                int skillid = model.GetQuickBaseSkillArray(PlayerDatas.Instance.baseData.Job)[_index];
                SkillConfig skillCfg = ConfigManager.Instance.GetTemplate<SkillConfig>(skillid);
                if (skillCfg != null)
                {
                    MessageWin.Inst.ShowFixedTip(Language.Get("L1115", skillCfg.Skillsource));
                }
                return;
            }
            model.presentSltSkillID = skill.id;
            UpdateSltSkill();
        }
        private void OnXpClick()
        {
            var _xpSkillId = model.GetXpSkillID();
            if (PlayerDatas.Instance.skill.GetSKillById(_xpSkillId) != null)
            {
                model.presentSltSkillID = _xpSkillId;
                UpdateSltSkill();
            }
        }
        private void UpdateQuickSkillSelect()
        {
            for (int i = 0; i < m_QuickSkills.Count; i++)
            {
                var _skillData = m_QuickSkills[i].skillData;
                var _select = _skillData.skillId == model.presentSltSkillID;
                var _activeSkill = PlayerDatas.Instance.skill.GetSKillById(_skillData.skillId) != null;
                _skillData.m_SelectImg.gameObject.SetActive(_select && _activeSkill);
            }
            var _xpSkillId = model.GetXpSkillID();
            bool xpSkillSelect = PlayerDatas.Instance.skill.GetSKillById(_xpSkillId) != null
                                   && model.presentSltSkillID == _xpSkillId;
            m_XpSkill.skillData.m_SelectImg.gameObject.SetActive(xpSkillSelect);
        }
        private void UpdateSltSkill()
        {
            flipActScroll.RefreshActive();
            UpdateQuickSkillSelect();
            OnUpdateSltSkillInfo();
        }
        private void RefreshXpSkill()
        {
            var xpSkillId = model.GetXpSkillID();
            m_XpSkill.skillData.SetSkillData(xpSkillId);
            var hasXpSkill = PlayerDatas.Instance.skill.GetSKillById(xpSkillId) != null;
            m_XpSkill.skillData.SetActive(hasXpSkill);
            m_XpSkill.skillData.m_LockImg.gameObject.SetActive(!hasXpSkill);
            m_XpCoolDownImg.gameObject.SetActive(false);
            onXpCoolDown = false;
            if (hasXpSkill)
            {
                Skill xpSkill = PlayerDatas.Instance.hero.SkillMgr.Get(xpSkillId);
                if (xpSkill.cd > 0)
                {
                    m_XpCoolDownImg.gameObject.SetActive(true);
                    onXpCoolDown = true;
                    RefreshXpCd();
                }
            }
        }
        private void RefreshXpCd()
        {
            if (model.xpSkill != null)
            {
                m_XpCoolDownImg.fillAmount = model.xpSkill.cd / (model.xpSkill.skillInfo.config.CoolDownTime * Constants.F_GAMMA);
                m_XpCoolDownTxt.text = TimeUtility.SecondsToHMS((int)model.xpSkill.cd);
                if (model.xpSkill.cd <= 0)
                {
                    onXpCoolDown = false;
                    m_XpCoolDownImg.gameObject.SetActive(false);
                }
            }
            else
            {
                onXpCoolDown = false;
            }
        }
        protected override void LateUpdate()
        {
            base.LateUpdate();
            if (model.skillDraging)
            {
                flipActScroll.locked = true;
                if (!m_DragImg.gameObject.activeSelf)
                {
                    m_DragImg.gameObject.SetActive(true);
                    SkillConfig cfg = ConfigManager.Instance.GetTemplate<SkillConfig>(model.skillDragId);
                    if (cfg != null)
                    {
                        m_DragSkillImg.SetSprite(cfg.IconName);
                    }
                }
                Vector2 _pos;
                if (RectTransformUtility.ScreenPointToLocalPointInRectangle(this.transform as RectTransform,
                    Input.mousePosition, CameraManager.uiCamera, out _pos))
                {
                    m_DragImg.rectTransform.localPosition = _pos;
                }
                if (Input.GetMouseButtonUp(0))
                {
                    model.skillDraging = false;
                    m_DragImg.gameObject.SetActive(false);
                    CheckReplaceQuickSkill();
                    flipActScroll.locked = false;
                }
            }
            if (onXpCoolDown)
            {
                RefreshXpCd();
            }
        }
        private void OnAutoUseXp()
        {
            m_IsAutoUseXp = !m_IsAutoUseXp;
            UpdateAutoXp();
        }
        private void UpdateAutoXp()
        {
            m_AutoXpCheck.gameObject.SetActive(m_IsAutoUseXp);
        }
        private void UpdateSkillPage()
        {
            m_PageOneBtn.image.SetSprite(m_SkillTurnplate.GroupIndex == 1 ?
                "SkillRightbtn_A" : "Skillbtnbtn_A");
            m_PageTwoBtn.image.SetSprite(m_SkillTurnplate.GroupIndex == 2 ?
                "SkillRightbtn_A" : "Skillbtnbtn_A");
        }
        private void CheckReplaceQuickSkill()
        {
            for (int i = 0; i < m_QuickSkillRect.Count; i++)
            {
                if (!InDisplay(i))
                {
                    continue;
                }
                var des = RectTransformUtility.CalculateRelativeRectTransformBounds(this.transform, m_QuickSkillRect[i]);
                var src = RectTransformUtility.CalculateRelativeRectTransformBounds(this.transform, m_DragImg.rectTransform);
                var dis = Vector3.Distance(des.center, src.center);
                if (dis < m_QuickSkillRect[i].rect.width / 2)
                {
                    if (PlayerDatas.Instance.skill.GetQuickSkillByPos(i) != null)
                    {
                        if (m_QuickSkills[i].skillData.skillId == model.skillDragId)
                        {
                            //SoundPlayer.Instance.PlayUIAudio(2);
                            return;
                        }
                        PlayerDatas.Instance.skill.SetQuickSkill(i, model.skillDragId);
                        SoundPlayer.Instance.PlayUIAudio(28);
                        UpdateSltSkill();
                    }
                    //SoundPlayer.Instance.PlayUIAudio(2);
                    break;
                }
            }
        }
        private bool InDisplay(int _index)
        {
            if (m_SkillTurnplate.GroupIndex == 1)
            {
                return _index < 3;
            }
            else if (m_SkillTurnplate.GroupIndex == 2)
            {
                return _index > 2;
            }
            return true;
        }
        private int m_AchieveSkillId = 0;
        void HandleAchievement()
        {
            m_AchieveSkillId = 0;
            if (AchievementGoto.achievementType == AchievementGoto.ExcuteSkill)
            {
                var _cfg = ConfigManager.Instance.GetTemplate<SuccessConfig>(AchievementGoto.guideAchievementId);
                var _skillId = ModelCenter.Instance.GetModel<AchievementModel>().FindSkillByJob(_cfg.Condition, PlayerDatas.Instance.baseData.Job);
                if (_skillId != 0)
                {
                    m_AchieveSkillId = _skillId;
                    var _index = skillListAct.FindIndex((x) =>
                     {
                         return x.SkillID == _skillId;
                     });
                    if (_index != -1)
                    {
                        var _page = _index / SkillModel.ACT_SKILL_NUM;
                        if (_page == 1)
                        {
                            flipActScroll.FlipRight();
                        }
                        flipActScroll.RefreshActive();
                        SysNotifyMgr.Instance.ShowTip("Achievement_109");
                    }
                }
            }
        }
    }
}
//--------------------------------------------------------
//    [Author]:           第二世界
//    [  Date ]:           Friday, November 10, 2017
//--------------------------------------------------------
using System;
using System.Collections;
using System.Collections.Generic;
using TableConfig;
using UnityEngine;
using UnityEngine.UI;
namespace Snxxz.UI
{
    public class SkillAccordWin : Window
    {
        [SerializeField] FlipScroll flipActScroll;
        [SerializeField] RectTransform m_ContainerSkillDetails;
        [SerializeField] RectTransform m_ContainerUnselect;
        [SerializeField] Text m_TreasureNameTxt;
        [SerializeField] Text m_SkillNameTxt;
        [SerializeField] Text m_SkillCoolDownTxt;
        [SerializeField] Text m_SkillDescTxt;
        [SerializeField] Button m_LeftBtn;
        [SerializeField] Button m_RightBtn;
        [SerializeField] List<SkillCell> m_QuickSkills = new List<SkillCell>();
        [SerializeField] SkillCell m_XpSkill;
        [SerializeField] Image m_XpCoolDownImg;
        [SerializeField] Text m_XpCoolDownTxt;
        [SerializeField] Image m_DragImg;
        [SerializeField] Image m_DragSkillImg;
        [SerializeField] List<RectTransform> m_QuickSkillRect = new List<RectTransform>();
        [SerializeField] Button m_PageOneBtn;
        [SerializeField] Button m_PageTwoBtn;
        [SerializeField] SkillTurnplate m_SkillTurnplate;
        [SerializeField] Button m_AutoUseXp;
        [SerializeField] Image m_AutoXpCheck;
        private List<SkillConfig> skillListAct = new List<SkillConfig>();
        private bool onXpCoolDown = false;
        private bool m_IsAutoUseXp = false;
        SkillModel m_Model;
        SkillModel model
        {
            get
            {
                return m_Model ?? (m_Model = ModelCenter.Instance.GetModel<SkillModel>());
            }
        }
        #region Built-in
        protected override void BindController()
        {
        }
        protected override void AddListeners()
        {
            flipActScroll.OnRefreshData += OnRefreshActSkill;
            flipActScroll.OnTweenCompt += OnTweenCompt;
            m_LeftBtn.onClick.AddListener(flipActScroll.FlipLeft);
            m_RightBtn.onClick.AddListener(flipActScroll.FlipRight);
            m_AutoUseXp.onClick.AddListener(OnAutoUseXp);
            m_PageOneBtn.onClick.AddListener(() =>
            {
                if (m_SkillTurnplate.GroupIndex != 1)
                {
                    m_SkillTurnplate.Turn(GestureType.Left);
                    UpdateSkillPage();
                }
            });
            m_PageTwoBtn.onClick.AddListener(() =>
            {
                if (m_SkillTurnplate.GroupIndex != 2)
                {
                    m_SkillTurnplate.Turn(GestureType.Right);
                    UpdateSkillPage();
                }
            });
            for (int i = 0; i < m_QuickSkills.Count; i++)
            {
                int index = i;
                m_QuickSkills[i].skillData.m_SkillBtn.onClick.AddListener(() =>
                {
                    OnQuickSkillClick(index);
                });
            }
            m_XpSkill.skillData.m_SkillBtn.AddListener(() =>
            {
                OnXpClick();
            });
        }
        protected override void OnPreOpen()
        {
            model.presentSltSkillID = 0;
            flipActScroll.locked = false;
            m_DragImg.gameObject.SetActive(false);
            Input.multiTouchEnabled = false;
            PlayerSkillDatas.OnQuickSkillRefresh += OnUpdateQuickSkill;
            PlayerSkillDatas.OnRefreshSkill += OnRefreshSkill;
            model.OnRefreshSltSkill += OnUpdateQuickSkill;
            model.OnRefreshSltSkill += UpdateSltSkill;
            GetSkillList();
            OnUpdateQuickSkill();
            for (int i = 0; i < SkillModel.QUICK_SKILL_COUNT; i++)
            {
                if (PlayerDatas.Instance.skill.GetQuickSkillByPos(i) != null)
                {
                    OnQuickSkillClick(i);
                    break;
                }
            }
            m_SkillTurnplate.Init();
            UpdateSkillPage();
            RefreshXpSkill();
            m_IsAutoUseXp = model.AutoUseXp();
            UpdateAutoXp();
        }
        protected override void OnActived()
        {
            base.OnActived();
            UpdatePageBtn();
        }
        private void OnRefreshSkill()
        {
            UpdateSltSkill();
            RefreshXpSkill();
        }
        protected override void OnAfterOpen()
        {
            HandleAchievement();
        }
        protected override void OnPreClose()
        {
            model.skillDraging = false;
            m_DragImg.gameObject.SetActive(false);
            PlayerSkillDatas.OnQuickSkillRefresh -= OnUpdateQuickSkill;
            PlayerSkillDatas.OnRefreshSkill -= OnRefreshSkill;
            model.OnRefreshSltSkill -= UpdateSltSkill;
            model.OnRefreshSltSkill -= OnUpdateQuickSkill;
            AchievementGoto.achievementType = 0;
            Input.multiTouchEnabled = true;
        }
        protected override void OnAfterClose()
        {
            model.SetAutoUseXp(m_IsAutoUseXp);
        }
        #endregion
        private void OnTweenCompt()
        {
            UpdatePageBtn();
        }
        void UpdatePageBtn()
        {
            if (flipActScroll.Page == 0)
            {
                m_LeftBtn.gameObject.SetActive(false);
            }
            else
            {
                m_LeftBtn.gameObject.SetActive(true);
            }
            if (flipActScroll.Page == flipActScroll.pageCnt - 1)
            {
                m_RightBtn.gameObject.SetActive(false);
            }
            else
            {
                m_RightBtn.gameObject.SetActive(true);
            }
        }
        void OnRefreshActSkill(int page, RectTransform cell)
        {
            for (int i = 0; i < cell.childCount; i++)
            {
                Transform skillTran = cell.GetChild(i);
                int index = page * SkillModel.ACT_SKILL_NUM + i;
                if (index < skillListAct.Count)
                {
                    if(AchievementGoto.achievementType==AchievementGoto.ExcuteSkill
                        && skillListAct[index].SkillID == m_AchieveSkillId)
                    {
                        var _effect = AchievementGuideEffectPool.Require(3);
                        _effect.transform.SetParentEx(skillTran, Vector3.zero, Vector3.zero, Vector3.one);
                        (_effect.transform as RectTransform).anchoredPosition = Vector3.zero;
                        AchievementGoto.achievementType = 0;
                        m_AchieveSkillId = 0;
                    }
                    skillTran.gameObject.SetActive(true);
                    skillTran.GetComponent<SkillCell>().Refresh(skillListAct[index]);
                }
                else
                {
                    skillTran.gameObject.SetActive(false);
                }
            }
        }
        void OnUpdateSltSkillInfo()
        {
            SkillConfig cfg = Config.Instance.Get<SkillConfig>(model.presentSltSkillID);
            m_ContainerSkillDetails.gameObject.SetActive(cfg != null);
            m_ContainerUnselect.gameObject.SetActive(cfg == null);
            if (cfg != null)
            {
                m_SkillNameTxt.text = cfg.SkillName;
                m_TreasureNameTxt.text = cfg.Skillsource;
                m_SkillDescTxt.text = UIHelper.ReplaceNewLine(cfg.Description);
                m_SkillCoolDownTxt.text = cfg.CoolDownTime == 0 ? string.Empty : Language.Get("L1065", cfg.CoolDownTime / 1000);
            }
        }
        void GetSkillList()
        {
            var _skillJobKey = (int)Math.Pow(2, PlayerDatas.Instance.baseData.Job);
            if (!model.skillActDict.ContainsKey(_skillJobKey))
            {
                DebugEx.LogErrorFormat("不存在该职业的技能{0}", _skillJobKey);
                return;
            }
            Dictionary<int, List<SkillConfig>> dic = model.skillActDict[_skillJobKey];
            Dictionary<int, PlayerSkillData> playerskills = PlayerDatas.Instance.skill.GetAllSkill();
            skillListAct.Clear();
            foreach (int key in dic.Keys)
            {
                List<SkillConfig> typeList = dic[key];
                SkillConfig lvCfg = typeList[0];
                foreach (SkillConfig cfg in typeList)
                {
                    if (PlayerDatas.Instance.skill.GetSKillById(cfg.SkillID) != null)
                    {
                        lvCfg = cfg;
                        break;
                    }
                }
                if (PlayerDatas.Instance.skill.GetFilterPlayerSkill(PlayerDatas.Instance.baseData.Job).Contains(lvCfg.SkillID))
                {
                    continue;
                }
                skillListAct.Add(lvCfg);
            }
            if (skillListAct.Count < 1)
            {
                return;
            }
            model.presentSltSkillID = skillListAct[0].SkillID;
            flipActScroll.pageCnt = Mathf.CeilToInt((float)skillListAct.Count / SkillModel.ACT_SKILL_NUM);
            UpdateSltSkill();
        }
        void OnUpdateQuickSkill()
        {
            int[] intarray = model.GetQuickBaseSkillArray(PlayerDatas.Instance.baseData.Job);
            for (int i = 0; i < m_QuickSkills.Count; i++)
            {
                PlayerSkillData data = PlayerDatas.Instance.skill.GetQuickSkillByPos(i);
                SkillConfig skillCfg = Config.Instance.Get<SkillConfig>(intarray[i]);
                if (data != null)
                {
                    m_QuickSkills[i].skillData.SetSkillData(data.id);
                    m_QuickSkills[i].skillData.SetActive(true);
                    m_QuickSkills[i].skillData.m_LockImg.gameObject.SetActive(false);
                }
                else
                {
                    m_QuickSkills[i].skillData.SetSkillData(skillCfg.SkillID);
                    m_QuickSkills[i].skillData.SetActive(false);
                    m_QuickSkills[i].skillData.m_LockImg.gameObject.SetActive(true);
                    if (PlayerDatas.Instance.skill.GetSKillById(intarray[i]) != null)
                    {
                        m_QuickSkills[i].skillData.m_LockImg.gameObject.SetActive(false);
                    }
                }
            }
        }
        private void OnQuickSkillClick(int _index)
        {
            PlayerSkillData skill = PlayerDatas.Instance.skill.GetQuickSkillByPos(_index);
            if (skill == null)
            {
                int skillid = model.GetQuickBaseSkillArray(PlayerDatas.Instance.baseData.Job)[_index];
                SkillConfig skillCfg = Config.Instance.Get<SkillConfig>(skillid);
                if (skillCfg != null)
                {
                    MessageWin.Inst.ShowFixedTip(Language.Get("L1115", skillCfg.Skillsource));
                }
                return;
            }
            model.presentSltSkillID = skill.id;
            UpdateSltSkill();
        }
        private void OnXpClick()
        {
            var _xpSkillId = model.GetXpSkillID();
            if (PlayerDatas.Instance.skill.GetSKillById(_xpSkillId) != null)
            {
                model.presentSltSkillID = _xpSkillId;
                UpdateSltSkill();
            }
        }
        private void UpdateQuickSkillSelect()
        {
            for (int i = 0; i < m_QuickSkills.Count; i++)
            {
                var _skillData = m_QuickSkills[i].skillData;
                var _select = _skillData.skillId == model.presentSltSkillID;
                var _activeSkill = PlayerDatas.Instance.skill.GetSKillById(_skillData.skillId) != null;
                _skillData.m_SelectImg.gameObject.SetActive(_select && _activeSkill);
            }
            var _xpSkillId = model.GetXpSkillID();
            bool xpSkillSelect = PlayerDatas.Instance.skill.GetSKillById(_xpSkillId) != null
                                   && model.presentSltSkillID == _xpSkillId;
            m_XpSkill.skillData.m_SelectImg.gameObject.SetActive(xpSkillSelect);
        }
        private void UpdateSltSkill()
        {
            flipActScroll.RefreshActive();
            UpdateQuickSkillSelect();
            OnUpdateSltSkillInfo();
        }
        private void RefreshXpSkill()
        {
            var xpSkillId = model.GetXpSkillID();
            m_XpSkill.skillData.SetSkillData(xpSkillId);
            var hasXpSkill = PlayerDatas.Instance.skill.GetSKillById(xpSkillId) != null;
            m_XpSkill.skillData.SetActive(hasXpSkill);
            m_XpSkill.skillData.m_LockImg.gameObject.SetActive(!hasXpSkill);
            m_XpCoolDownImg.gameObject.SetActive(false);
            onXpCoolDown = false;
            if (hasXpSkill)
            {
                Skill xpSkill = PlayerDatas.Instance.hero.SkillMgr.Get(xpSkillId);
                if (xpSkill.cd > 0)
                {
                    m_XpCoolDownImg.gameObject.SetActive(true);
                    onXpCoolDown = true;
                    RefreshXpCd();
                }
            }
        }
        private void RefreshXpCd()
        {
            if (model.xpSkill != null)
            {
                m_XpCoolDownImg.fillAmount = model.xpSkill.cd / (model.xpSkill.skillInfo.config.CoolDownTime * Constants.F_GAMMA);
                m_XpCoolDownTxt.text = TimeUtility.SecondsToHMS((int)model.xpSkill.cd);
                if (model.xpSkill.cd <= 0)
                {
                    onXpCoolDown = false;
                    m_XpCoolDownImg.gameObject.SetActive(false);
                }
            }
            else
            {
                onXpCoolDown = false;
            }
        }
        protected override void LateUpdate()
        {
            base.LateUpdate();
            if (model.skillDraging)
            {
                flipActScroll.locked = true;
                if (!m_DragImg.gameObject.activeSelf)
                {
                    m_DragImg.gameObject.SetActive(true);
                    SkillConfig cfg = Config.Instance.Get<SkillConfig>(model.skillDragId);
                    if (cfg != null)
                    {
                        m_DragSkillImg.SetSprite(cfg.IconName);
                    }
                }
                Vector2 _pos;
                if (RectTransformUtility.ScreenPointToLocalPointInRectangle(this.transform as RectTransform,
                    Input.mousePosition, CameraManager.uiCamera, out _pos))
                {
                    m_DragImg.rectTransform.localPosition = _pos;
                }
                if (Input.GetMouseButtonUp(0))
                {
                    model.skillDraging = false;
                    m_DragImg.gameObject.SetActive(false);
                    CheckReplaceQuickSkill();
                    flipActScroll.locked = false;
                }
            }
            if (onXpCoolDown)
            {
                RefreshXpCd();
            }
        }
        private void OnAutoUseXp()
        {
            m_IsAutoUseXp = !m_IsAutoUseXp;
            UpdateAutoXp();
        }
        private void UpdateAutoXp()
        {
            m_AutoXpCheck.gameObject.SetActive(m_IsAutoUseXp);
        }
        private void UpdateSkillPage()
        {
            m_PageOneBtn.image.SetSprite(m_SkillTurnplate.GroupIndex == 1 ?
                "SkillRightbtn_A" : "Skillbtnbtn_A");
            m_PageTwoBtn.image.SetSprite(m_SkillTurnplate.GroupIndex == 2 ?
                "SkillRightbtn_A" : "Skillbtnbtn_A");
        }
        private void CheckReplaceQuickSkill()
        {
            for (int i = 0; i < m_QuickSkillRect.Count; i++)
            {
                if (!InDisplay(i))
                {
                    continue;
                }
                var des = RectTransformUtility.CalculateRelativeRectTransformBounds(this.transform, m_QuickSkillRect[i]);
                var src = RectTransformUtility.CalculateRelativeRectTransformBounds(this.transform, m_DragImg.rectTransform);
                var dis = Vector3.Distance(des.center, src.center);
                if (dis < m_QuickSkillRect[i].rect.width / 2)
                {
                    if (PlayerDatas.Instance.skill.GetQuickSkillByPos(i) != null)
                    {
                        if (m_QuickSkills[i].skillData.skillId == model.skillDragId)
                        {
                            //SoundPlayer.Instance.PlayUIAudio(2);
                            return;
                        }
                        PlayerDatas.Instance.skill.SetQuickSkill(i, model.skillDragId);
                        SoundPlayer.Instance.PlayUIAudio(28);
                        UpdateSltSkill();
                    }
                    //SoundPlayer.Instance.PlayUIAudio(2);
                    break;
                }
            }
        }
        private bool InDisplay(int _index)
        {
            if (m_SkillTurnplate.GroupIndex == 1)
            {
                return _index < 3;
            }
            else if (m_SkillTurnplate.GroupIndex == 2)
            {
                return _index > 2;
            }
            return true;
        }
        private int m_AchieveSkillId = 0;
        void HandleAchievement()
        {
            m_AchieveSkillId = 0;
            if (AchievementGoto.achievementType == AchievementGoto.ExcuteSkill)
            {
                var _cfg = Config.Instance.Get<SuccessConfig>(AchievementGoto.guideAchievementId);
                var _skillId = ModelCenter.Instance.GetModel<AchievementModel>().FindSkillByJob(_cfg.Condition, PlayerDatas.Instance.baseData.Job);
                if (_skillId != 0)
                {
                    m_AchieveSkillId = _skillId;
                    var _index = skillListAct.FindIndex((x) =>
                     {
                         return x.SkillID == _skillId;
                     });
                    if (_index != -1)
                    {
                        var _page = _index / SkillModel.ACT_SKILL_NUM;
                        if (_page == 1)
                        {
                            flipActScroll.FlipRight();
                        }
                        flipActScroll.RefreshActive();
                        SysNotifyMgr.Instance.ShowTip("Achievement_109");
                    }
                }
            }
        }
    }
}