using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class TalentSkillBehaviour : MonoBehaviour { [SerializeField] Image m_Icon; [SerializeField] Text m_Level; [SerializeField] Button m_Button; [SerializeField] RectTransform m_ContainerSelect; int skillId = 0; TalentModel model { get { return ModelCenter.Instance.GetModel(); } } private void Awake() { m_Button.onClick.AddListener(SelectSkill); } public void Display(int _skillId) { skillId = _skillId; model.talentSkillUpdate -= TalentSkillUpdate; model.talentSkillUpdate += TalentSkillUpdate; model.selectSkillEvent -= OnSelectSkillEvent; model.selectSkillEvent += OnSelectSkillEvent; model.talentPointUpdate -= TalentPointUpdate; model.talentPointUpdate += TalentPointUpdate; model.talentSkillLevelUp -= TalentSkillLevelUp; model.talentSkillLevelUp += TalentSkillLevelUp; Display(); } private void Display() { TalentSkill talent; if (model.TryGetTalent(skillId, out talent)) { var config = SkillConfig.Get(talent.skillId); if (config != null) { m_Icon.SetSprite(config.IconName); } m_Level.text = StringUtility.Contact(talent.level, "/", talent.maxLevel); DisplayState(); m_ContainerSelect.gameObject.SetActive(skillId == model.selectSkill); } } private void DisplayState() { TalentSkill talent; if (model.TryGetTalent(skillId, out talent)) { var error = 0; m_Icon.material = talent.level > 0 || model.SatisfyLevelUp(talent.skillId, out error) ? MaterialUtility.GetUIDefaultGraphicMaterial() : MaterialUtility.GetDefaultSpriteGrayMaterial(); } } private void TalentSkillUpdate(int _skillid) { if (skillId == _skillid) { Display(); } else if (skillId != 0) { DisplayState(); } } private void OnSelectSkillEvent() { m_ContainerSelect.gameObject.SetActive(skillId == model.selectSkill); } public void Dispose() { model.talentSkillUpdate -= TalentSkillUpdate; model.selectSkillEvent -= OnSelectSkillEvent; model.talentPointUpdate -= TalentPointUpdate; model.talentSkillLevelUp -= TalentSkillLevelUp; } private void TalentSkillLevelUp(int _skillId) { if (skillId != 0 && skillId == _skillId) { EffectMgr.Instance.PlayUIEffect(3069, 2500, transform, false); } } private void TalentPointUpdate() { if (skillId != 0) { DisplayState(); } } private void SelectSkill() { if (skillId != 0) { model.selectSkill = skillId; } } } }