//-------------------------------------------------------- // [Author]: 第二世界 // [ Date ]: Friday, April 26, 2019 //-------------------------------------------------------- using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class ExpertSkillSelectWin : Window { [SerializeField] PositionTween m_PositionTween; [SerializeField] SkillExpertWidget[] m_SkillExperts; [SerializeField] UIAlphaTween m_AlphaTween; [SerializeField] Image m_SkillIcon; [SerializeField] Text m_SkillName; [SerializeField] Text m_Reiki; [SerializeField] ScrollerController m_Controller; [SerializeField] Button m_Select; [SerializeField] Button m_Close1; [SerializeField] Button m_Close2; public static int selectSkillId = 0; bool m_OpenDetail = false; int m_SelectExpert = 0; int selectExpert { get { return m_SelectExpert; } set { if (m_SelectExpert != value) { if (!m_OpenDetail) { m_OpenDetail = true; DisplayAnimation(); } m_SelectExpert = value; DisplaySelect(); DisplayDetail(); } } } TreasureSkillModel model { get { return ModelCenter.Instance.GetModel(); } } #region Built-in protected override void BindController() { } protected override void AddListeners() { m_Controller.OnRefreshCell += OnRefreshCell; m_Select.AddListener(OnSelect); m_Close1.AddListener(CloseClick); m_Close2.AddListener(CloseClick); } protected override void OnPreOpen() { m_PositionTween.SetStartState(); m_AlphaTween.SetStartState(); m_OpenDetail = false; Display(); } protected override void OnAfterOpen() { } protected override void OnPreClose() { } protected override void OnAfterClose() { } void Display() { SetDefaultSelect(); DisplayExperts(); DisplaySelect(); DisplayDetail(); } void SetDefaultSelect() { m_SelectExpert = 0; model.TryGetExpertSkill(selectSkillId, out m_SelectExpert); } void DisplayExperts() { TreasureSkill skill; if (model.TryGetSkill(selectSkillId, out skill)) { for (int i = 0; i < m_SkillExperts.Length; i++) { var potential = skill.potentials[i]; m_SkillExperts[i].Display(potential.id, OnSelect); } } } void DisplaySelect() { for (int i = 0; i < m_SkillExperts.Length; i++) { m_SkillExperts[i].SetSelect(selectExpert == m_SkillExperts[i].skillId); } } void DisplayDetail() { if (selectExpert != 0) { var level = 0; TreasurePotential expert; if (model.TryGetPotential(selectExpert, out expert)) { level = expert.level; } SkillConfig skillConfig; if (level == 0) { skillConfig = SkillConfig.Get(selectExpert); } else { skillConfig = SkillConfig.Get(selectExpert + level - 1); } m_SkillIcon.SetSprite(skillConfig.IconName); m_SkillName.text = skillConfig.SkillName; var property = skillConfig.RequireProperty(); var propertyConfig = PlayerPropertyConfig.Get(property); m_Reiki.text = propertyConfig.Name; m_Reiki.color = UIHelper.GetPropertyColor(property); m_Controller.Refresh(); for (int i = 1; i <= skillConfig.SkillMaxLV; i++) { m_Controller.AddCell(ScrollerDataType.Header, i); } m_Controller.Restart(); } } void DisplayAnimation() { m_PositionTween.Play(); m_AlphaTween.Play(); } private void OnSelect() { if (selectExpert != 0) { var pak = new CA516_tagCMSelectSkillElement(); pak.SkillTypeID = (uint)selectExpert; GameNetSystem.Instance.SendInfo(pak); } CloseImmediately(); } private void OnSelect(int skillId) { selectExpert = skillId; } private void OnRefreshCell(ScrollerDataType type, CellView cell) { var expertCell = cell as ExpertSkillConditionCell; expertCell.Display(selectExpert, cell.index); } #endregion [Serializable] public class SkillExpertWidget { [SerializeField] Image m_Icon; [SerializeField] Text m_SkillName; [SerializeField] Text m_Reiki; [SerializeField] Transform m_ContainerSelect; [SerializeField] Text m_Use; [SerializeField] Button m_Select; public int skillId { get; private set; } TreasureSkillModel model { get { return ModelCenter.Instance.GetModel(); } } public void Display(int skillId, Action func) { this.skillId = skillId; var skillConfig = SkillConfig.Get(skillId); m_Icon.SetSprite(skillConfig.IconName); m_SkillName.text = skillConfig.SkillName; var property = skillConfig.RequireProperty(); var propertyConfig = PlayerPropertyConfig.Get(property); m_Reiki.text = propertyConfig.Name; m_Reiki.color = UIHelper.GetPropertyColor(property); var selectExpertSkill = 0; model.TryGetExpertSkill(ExpertSkillSelectWin.selectSkillId, out selectExpertSkill); m_Use.gameObject.SetActive(selectExpertSkill == skillId); m_Select.SetListener(() => { if (func != null) { func(skillId); } }); } public void SetSelect(bool select) { m_ContainerSelect.gameObject.SetActive(select); } } } }