| //--------------------------------------------------------  | 
| //    [Author]:           第二世界  | 
| //    [  Date ]:           Wednesday, February 20, 2019  | 
| //--------------------------------------------------------  | 
|   | 
| using System;  | 
| using System.Collections;  | 
| using System.Collections.Generic;  | 
| using UnityEngine;  | 
| using UnityEngine.UI;  | 
|   | 
| namespace vnxbqy.UI  | 
| {  | 
|       | 
|     public class TreasureSkillWin : Window  | 
|     {  | 
|         [SerializeField] ScrollerController m_Controller;  | 
|         [SerializeField] SkillWidget m_SkillNow;  | 
|         [SerializeField] SkillExpertBehaviour[] m_SkillExpertBehaviours;  | 
|         [SerializeField] ExpertSkillSelectBehaviour m_ExpertSkillBehaviours;  | 
|         [SerializeField] float m_DisappearTime = 1f;  | 
|   | 
|         public static int autoSelectSkill = 0;  | 
|   | 
|   | 
|         float functionGuideTime = 0f;  | 
|   | 
|         List<int> displaySkills = new List<int>();  | 
|   | 
|         TreasureSkillModel model  | 
|         {  | 
|             get { return ModelCenter.Instance.GetModel<TreasureSkillModel>(); }  | 
|         }  | 
|   | 
|         PackModel packModel  | 
|         {  | 
|             get { return ModelCenter.Instance.GetModel<PackModel>(); }  | 
|         }  | 
|   | 
|         SkillModel skillModel { get { return ModelCenter.Instance.GetModel<SkillModel>(); } }  | 
|   | 
|         ReikiRootModel reikiRootModel { get { return ModelCenter.Instance.GetModel<ReikiRootModel>(); } }  | 
|         TreasureModel treasureModel { get { return ModelCenter.Instance.GetModel<TreasureModel>(); } }  | 
|   | 
|         #region Built-in  | 
|         protected override void BindController()  | 
|         {  | 
|         }  | 
|   | 
|         protected override void AddListeners()  | 
|         {  | 
|             m_Controller.OnRefreshCell += OnRefreshCell;  | 
|         }  | 
|   | 
|         protected override void OnPreOpen()  | 
|         {  | 
|             SetDefaultSelect();  | 
|   | 
|             model.selectActivePriority = false;  | 
|   | 
|   | 
|             model.treasureSkillRefresh += TreasureSkillRefresh;  | 
|             model.selectRefresh += SelectRefresh;  | 
|             model.selectExpertSkillRefresh += OnExpertSkillSelect;  | 
|             model.skillLevelUpRefresh += SkillLevelUpRefresh;  | 
|             packModel.refreshItemCountEvent += RefreshItemCountEvent;  | 
|             model.expertSkillRefresh += ExpertSkillRefresh;  | 
|             model.expertActiveRefresh += OnExpertSkillActive;  | 
|               | 
|         }  | 
|   | 
|         protected override void OnActived()  | 
|         {  | 
|             base.OnActived();  | 
|   | 
|             var index = displaySkills.IndexOf(model.selectSkill);  | 
|             if (index != -1)  | 
|             {  | 
|                 var offset = 0f;  | 
|                 m_Controller.JumpIndex(index, ref offset);  | 
|                 var rect = m_Controller.mScrollRect.transform as RectTransform;  | 
|                 m_Controller.JumpIndex(offset - rect.rect.height / 2 + 50, 0, EnhancedUI.EnhancedScroller.EnhancedScroller.TweenType.immediate);  | 
|             }  | 
|         }  | 
|   | 
|         protected override void OnAfterOpen()  | 
|         {  | 
|             Display();  | 
|         }  | 
|   | 
|         protected override void OnPreClose()  | 
|         {  | 
|             model.treasureSkillRefresh -= TreasureSkillRefresh;  | 
|             model.selectRefresh -= SelectRefresh;  | 
|             model.selectExpertSkillRefresh -= OnExpertSkillSelect;  | 
|             model.skillLevelUpRefresh -= SkillLevelUpRefresh;  | 
|             packModel.refreshItemCountEvent -= RefreshItemCountEvent;  | 
|             model.expertSkillRefresh -= ExpertSkillRefresh;  | 
|             model.expertActiveRefresh -= OnExpertSkillActive;  | 
|   | 
|             if (autoSelectSkill != 0)  | 
|             {  | 
|                 var pak = new CA516_tagCMSelectSkillElement();  | 
|                 pak.SkillTypeID = (uint)autoSelectSkill;  | 
|                 pak.DoType = 1;  | 
|                 GameNetSystem.Instance.SendInfo(pak);  | 
|             }  | 
|   | 
|             if(NewBieCenter.Instance.inGuiding&& NewBieCenter.Instance.currentGuide == 62)  | 
|             {  | 
|                 NewBieCenter.Instance.FinishNewBieGuide(62);  | 
|             }  | 
|   | 
|             m_ExpertSkillBehaviours.OnClose();  | 
|         }  | 
|   | 
|         protected override void OnAfterClose()  | 
|         {  | 
|         }  | 
|         #endregion  | 
|   | 
|         void SetDefaultSelect()  | 
|         {  | 
|   | 
|             displaySkills.Clear();  | 
|   | 
|             var _skill = 0;  | 
|             List<int> list;  | 
|             if (model.TryGetSkills(out list))  | 
|             {  | 
|                 displaySkills.AddRange(list);  | 
|   | 
|                 var index = displaySkills.FindIndex((x) =>  | 
|                   {  | 
|                       var treasureId = treasureModel.GetTreasureBySkillId(x);  | 
|                       var treasureConfig = TreasureConfig.Get(treasureId);  | 
|                       return treasureConfig.Category == (int)TreasureCategory.Fairy;  | 
|                   });  | 
|   | 
|                 if (index != -1)  | 
|                 {  | 
|                     var skillId = displaySkills[index];  | 
|                     TreasureSkill treasureSkill;  | 
|                     var isActive = model.TryGetSkill(skillId, out treasureSkill)  | 
|                         && treasureSkill.level > 0;  | 
|                     displaySkills.RemoveAt(index);  | 
|                     if (isActive)  | 
|                     {  | 
|                         displaySkills.Insert(0, skillId);  | 
|                     }  | 
|                     else  | 
|                     {  | 
|                         displaySkills.Add(skillId);  | 
|                     }  | 
|                 }  | 
|   | 
|                 foreach (var skillId in displaySkills)  | 
|                 {  | 
|                     TreasureSkill skill;  | 
|                     if (model.TryGetSkill(skillId, out skill))  | 
|                     {  | 
|                         if (_skill == 0 && skill.level > 0)  | 
|                         {  | 
|                             _skill = skillId;  | 
|                         }  | 
|                         if (skill.redpoint.state == RedPointState.Simple)  | 
|                         {  | 
|                             _skill = skillId;  | 
|                         }  | 
|                         if (model.selectActivePriority && skill.expertRedpoint.state == RedPointState.Simple)  | 
|                         {  | 
|                             _skill = skillId;  | 
|                             break;  | 
|                         }  | 
|                     }  | 
|                 }  | 
|                 if (_skill == 0)  | 
|                 {  | 
|                     _skill = list[0];  | 
|                 }  | 
|             }  | 
|             model.selectSkill = _skill;  | 
|         }  | 
|   | 
|         private void Display()  | 
|         {  | 
|             DisplaySkills();  | 
|             DisplaySkillDetial();  | 
|             SetDefaultExpertSkill();  | 
|             DisplayExpertSkill();  | 
|             DisplayExpertSkillDesc();  | 
|         }  | 
|   | 
|         private void DisplaySkills()  | 
|         {  | 
|             m_Controller.Refresh();  | 
|             for (int i = 0; i < displaySkills.Count; i++)  | 
|             {  | 
|                 m_Controller.AddCell(ScrollerDataType.Header, displaySkills[i]);  | 
|             }  | 
|             m_Controller.Restart();  | 
|         }  | 
|   | 
|         void DisplaySkillDetial()  | 
|         {  | 
|             TreasureSkill skill;  | 
|             if (model.TryGetSkill(model.selectSkill, out skill))  | 
|             {  | 
|                 var config = skill.GetSkillConfig(skill.level);  | 
|                 if (config == null)  | 
|                 {  | 
|                     return;  | 
|                 }  | 
|   | 
|                 m_SkillNow.Display(skill.skillId, skill.level);  | 
|             }  | 
|         }  | 
|   | 
|         void OnExpertSkillSelect()  | 
|         {  | 
|             DisplayExpertSkill();  | 
|             DisplayExpertSkillDesc();  | 
|         }  | 
|   | 
|         //专精描述  | 
|         void DisplayExpertSkillDesc()  | 
|         {  | 
|             m_ExpertSkillBehaviours.OnClose();  | 
|             m_ExpertSkillBehaviours.OnShow();  | 
|         }  | 
|   | 
|         void OnExpertSkillActive(int id)  | 
|         {  | 
|             DisplayExpertSkill();  | 
|         }  | 
|   | 
|         void DisplayExpertSkill()  | 
|         {  | 
|             DisplayExpertSkills();  | 
|         }  | 
|   | 
|         void DisplayExpertSkills()  | 
|         {  | 
|             TreasureSkill skill;  | 
|             if (model.TryGetSkill(model.selectSkill, out skill))  | 
|             {  | 
|                 for (int i = 0; i < m_SkillExpertBehaviours.Length; i++)  | 
|                 {  | 
|                     var potential = skill.potentials[i];  | 
|                     var level = 0;  | 
|                     model.TryGetExpertActiveLevel(potential.id, out level);  | 
|                     m_SkillExpertBehaviours[i].Display(potential.id, level);  | 
|                 }  | 
|             }  | 
|         }  | 
|   | 
|   | 
|         private void OnRefreshCell(ScrollerDataType type, CellView cell)  | 
|         {  | 
|             var skillCell = cell as TreasureSkillCell;  | 
|             skillCell.Display(cell.index);  | 
|         }  | 
|   | 
|   | 
|   | 
|         private void TreasureSkillRefresh(int skillId)  | 
|         {  | 
|             m_Controller.m_Scorller.RefreshActiveCellViews();  | 
|             if (skillId == model.selectSkill)  | 
|             {  | 
|                 DisplaySkillDetial();  | 
|             }  | 
|         }  | 
|   | 
|         private void SelectRefresh()  | 
|         {  | 
|             m_Controller.m_Scorller.RefreshActiveCellViews();  | 
|             DisplaySkillDetial();  | 
|             SetDefaultExpertSkill();  | 
|             //DisplayExpertSkill();  | 
|             //DisplayExpertSkillDesc();  | 
|         }  | 
|   | 
|         // 默认选中专精技能 当前使用专精-红点-表顺序  | 
|         private void SetDefaultExpertSkill()  | 
|         {  | 
|             var skillId = 0;  | 
|             if (model.TryGetExpertSkill(model.selectSkill, out skillId))  | 
|             {  | 
|                 model.selecttExpertSkill = skillId;  | 
|                 return;  | 
|             }  | 
|   | 
|             TreasureSkill treasureSkill;  | 
|             if (model.TryGetSkill(model.selectSkill, out treasureSkill))  | 
|             {  | 
|                 foreach (var potential in treasureSkill.potentials)  | 
|                 {  | 
|                     if (potential.activeRedpoint.state != RedPointState.None)  | 
|                     {  | 
|                         model.selecttExpertSkill = potential.id;  | 
|                         return;  | 
|                     }  | 
|                 }  | 
|                 model.selecttExpertSkill = treasureSkill.potentials[1].id;  | 
|                 return;  | 
|             }  | 
|   | 
|         }  | 
|   | 
|   | 
|         private void SkillLevelUpRefresh(int id)  | 
|         {  | 
|             if (model.selectSkill == id)  | 
|             {  | 
|                 m_Controller.m_Scorller.RefreshActiveCellViews();  | 
|                 DisplaySkillDetial();  | 
|             }  | 
|         }  | 
|   | 
|         private void ExpertSkillRefresh()  | 
|         {  | 
|             DisplayExpertSkill();  | 
|             m_Controller.m_Scorller.RefreshActiveCellViews();  | 
|   | 
|         }  | 
|   | 
|         private void RefreshItemCountEvent(PackType packType, int arg2, int itemId)  | 
|         {  | 
|             if (packType == PackType.Item && model.skillLevelUpItems.Contains(itemId))  | 
|             {  | 
|                 DisplaySkillDetial();  | 
|             }  | 
|         }  | 
|   | 
|   | 
|   | 
|   | 
|   | 
|         [Serializable]  | 
|         public class SkillWidget  | 
|         {  | 
|             [SerializeField] Transform m_Container;  | 
|             [SerializeField] Text m_SkillLevel;  | 
|             [SerializeField] Text m_SkillCoolDown;  | 
|             [SerializeField] Text m_SkillDesc;  | 
|   | 
|             TreasureSkillModel model { get { return ModelCenter.Instance.GetModel<TreasureSkillModel>(); } }  | 
|   | 
|             public void Display(int skillId, int level)  | 
|             {  | 
|                 m_SkillLevel.text = Language.Get("SkillActLevel", level);  | 
|                 TreasureSkill skill;  | 
|                 model.TryGetSkill(skillId, out skill);  | 
|                 var skillConfig = skill.GetSkillConfig(level);  | 
|                 m_SkillCoolDown.text = skillConfig.CoolDownTime == 0 ? string.Empty  | 
|                     : Language.Get("L1065", skillConfig.CoolDownTime / 1000);  | 
|                 m_SkillDesc.text = skillConfig.Description;  | 
|             }  | 
|   | 
|             public void SetActive(bool active)  | 
|             {  | 
|                 m_Container.SetActive(active);  | 
|             }  | 
|         }  | 
|   | 
|           | 
|     }  | 
| }  | 
|   | 
|   | 
|   | 
|   |