using System; using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.UI; namespace Snxxz.UI { public class ExpertSkillConditionCell : MonoBehaviour { [SerializeField] Text m_Condition; [SerializeField] Text m_Description; [SerializeField] Image m_Line; [SerializeField] UIEffect m_Effect; int skillId = 0; int level = 0; TreasureSkillModel model { get { return ModelCenter.Instance.GetModel(); } } public void Display(int skillId,int level) { this.skillId = skillId; this.level = level; var activeLevel = 0; model.TryGetExpertActiveLevel(skillId, out activeLevel); var treasureSkillId = 0; model.ContainsSkill(skillId, out treasureSkillId); var treasureSkillActive = false; TreasureSkill treasureSkill; if (model.TryGetSkill(treasureSkillId, out treasureSkill)) { treasureSkillActive = treasureSkill.level > 0; } var skillConfig = SkillConfig.Get(skillId + level - 1); var property = skillConfig.RequireProperty(); var currentValue = UIHelper.GetPropertyValue((PropertyType)property); var propertyConfig = PlayerPropertyConfig.Get(property); var valueLabel = UIHelper.AppendColor(currentValue >= skillConfig.RequirePropertyValue() && treasureSkillActive ? TextColType.Green : TextColType.Red , skillConfig.RequirePropertyValue().ToString()); m_Condition.text = string.Format("{0} {1}{2}激活", Language.Get("ExpertSkillLV", Language.Get("Num_CHS_" + level)), propertyConfig.Name, valueLabel); m_Description.text = skillConfig.Description; m_Line.gameObject.SetActive(level < skillConfig.SkillMaxLV); if (activeLevel >= level) { m_Description.color = UIHelper.s_LightYellow; m_Condition.color = UIHelper.s_Gold; } else { m_Description.color = UIHelper.s_BrightWhiteColor; m_Condition.color = UIHelper.s_BrightWhiteColor; if (currentValue >= skillConfig.RequirePropertyValue() && treasureSkillActive) { m_Condition.text += UIHelper.AppendColor(TextColType.Green, "(可激活)"); } } model.expertActiveRefresh -= ExpertActiveRefresh; model.expertActiveRefresh += ExpertActiveRefresh; } public void Dispose() { model.expertActiveRefresh -= ExpertActiveRefresh; } private void ExpertActiveRefresh(int id) { if (skillId == id) { var activeLevel = 0; model.TryGetExpertActiveLevel(id, out activeLevel); if (activeLevel == level) { m_Effect.Play(); } Display(skillId, level); } } } }