using System.Collections.Generic; using System.Linq; using Core.Language; using Core.Utility; using Excel2Json; using GameLogic.Hero; using UnityEngine; using UnityEngine.UI; namespace Fort23.Mono { [UIBinding(prefab = "SkillUIComponent" )] public partial class SkillUIComponent : UIComponent { private void Init() { } public override void AddEvent() { } public override void DelEvent() { } public override void AddButtonEvent() { btnBack.onClick.AddListener(OnClickBack); } private void OnClickBack() { UIManager.Instance.DormancyGComponent(this); UIManager.Instance.DormancyAllGComponent("WidgetIconSkill"); } private HeroInfo heroInfo; public List allSkillIcon = new List(); public async void InitUI(HeroInfo heroInfo) { this.heroInfo = heroInfo; int idx = 0; foreach (KeyValuePair> keyValuePair in heroInfo.SkillData.mySkillDic) { if (keyValuePair.Key == GlobalParam.Normal_Attack_Skill_Group_ID) { //普攻不需要生成相应的技能ICON continue; } SkillInfo skillInfo = heroInfo.SkillData.GetHighestLevelOr1(keyValuePair.Key); WidgetIconSkill widgetIconSkill = await UIManager.Instance.CreateGComponent(null, poolName: "WidgetIconSkill", root: skillRoot); widgetIconSkill.InitWidget(skillInfo); allSkillIcon.Add(widgetIconSkill); //显示第一个技能的详情 if (idx == 0) { ShowSkillDetail(keyValuePair.Key); } idx++; } } public void SetOtherBorder(WidgetIconSkill iconSkill) { foreach (WidgetIconSkill widgetIconSkill in allSkillIcon) { if (widgetIconSkill != iconSkill) { widgetIconSkill.imgBorder.color = Color.black; } } } public void ShowSkillDetail(int groupID) { List skillInfos = heroInfo.SkillData.mySkillDic[groupID]; // skillInfos.Sort((SkillInfo x, SkillInfo y) => x.skillConfig.level.CompareTo(y.skillConfig.level)); foreach (GameObject go in skillDesc) { go.SetActive(false); } // SkillInfo skillInfo = heroInfo.skillComponent.GetHighestLevel(groupID); //最高解锁的Skill SkillInfo maxSkillUnLock = skillInfos[0]; //第一个未解锁的Skill SkillInfo firstSkillLock = null; bool maxLv = false; bool oneSet = true; int tmpLv = 0; for (int i = 0; i < skillInfos.Count; i++) { string unLockConditionStr = ""; Color color = Color.white; if (skillInfos[i].isUnLock) { if (skillInfos[i].skillConfig.level > tmpLv) { tmpLv = skillInfos[i].skillConfig.level; maxSkillUnLock = skillInfos[i]; } //最后一个技能也解锁了 if (i >= skillInfos.Count - 1) { maxLv = true; } } else { //if (skillInfos[i].skillUpConfig.upType == 1) SkillUpConfig upConfig = PlayerManager.Instance.heroController.GetSkillUpConfig(skillInfos[i].skillConfig.ID); if (upConfig.upType == 1) { unLockConditionStr = LanguageManager.Instance.Text(42, upConfig.upValue); //if (i > 0 && oneSet) 的意思是:没有解锁的且不是1级的技能,这样的技能,只设置一次txtTips //只设置一次txtTips是满足需求的,给玩家说,下一级什么时候解锁,不限制的话,会提示最后一级什么时候解锁 if (i > 0 && oneSet) { // txtTips.text = "等级达到" + firstSkillUpConfig.upValue + "级后解锁"; oneSet = false; txtTips.text = LanguageManager.Instance.Text(37, upConfig.upValue); } } else if(upConfig.upType == 2) { unLockConditionStr = LanguageManager.Instance.Text(43, upConfig.upValue); //if (i > 0 && oneSet) 的意思是:没有解锁的且不是1级的技能,这样的技能,只设置一次txtTips //只设置一次txtTips是满足需求的,给玩家说,下一级什么时候解锁,不限制的话,会提示最后一级什么时候解锁 if (i > 0 && oneSet) { // txtTips.text = "等级达到" + firstSkillUpConfig.upValue + "级后解锁"; oneSet = false; txtTips.text = LanguageManager.Instance.Text(39, upConfig.upValue); } } color = new Color(0.65f, 0.65f, 0.65f); if (i == 0) { // once = false; firstSkillLock = skillInfos[i]; } } GameObject go = skillDesc[i] as GameObject; // object[] data = new object[skillInfos[i].skillConfig.effectValue.Length]; // for (int j = 0; j < skillInfos[i].skillConfig.effectValue.Length; j++) // { // data[j] = skillInfos[i].skillConfig.effectValue[j]; // } object[] data = HeroUITools.GetSkillParam(skillInfos[i].skillConfig); string lvTxt = ""; //1级技能直接显示技能效果,从2级开始,UI上要显示 2级:技能效果描述 if (i > 0) { lvTxt = LanguageManager.Instance.Text(41, skillInfos[i].skillConfig.level); } go.GetComponent().text = lvTxt + LanguageManager.Instance.Text(skillInfos[i].skillConfig.desc, data) + unLockConditionStr; go.GetComponent().color = color; go.SetActive(true); } // SkillInfo skillInfo = heroInfo.skillComponent.GetHighestLevel(groupID); txtSkillName.text = LanguageManager.Instance.Text(maxSkillUnLock.skillConfig.name); txtLv.text = maxSkillUnLock.skillConfig.level.ToString(); txtCD.text = "冷却" + maxSkillUnLock.skillConfig.cd + "秒"; //第一个技能就没有解锁时 if (firstSkillLock != null) { SkillUpConfig firstSkillUpConfig = PlayerManager.Instance.heroController.GetSkillUpConfig(firstSkillLock.skillConfig.ID); if (firstSkillUpConfig.upType == 1) { // txtTips.text = "等级达到" + firstSkillUpConfig.upValue + "级后解锁"; txtTips.text = LanguageManager.Instance.Text(38, firstSkillUpConfig.upValue); } else if (firstSkillUpConfig.upType == 2) { // txtTips.text = "星级达到" + firstSkillUpConfig.upValue + "星后解锁"; txtTips.text = LanguageManager.Instance.Text(40, firstSkillUpConfig.upValue); } } // else // { // txtTips.text = "技能已达最高等级"; // } if (maxLv) { txtTips.text = LanguageManager.Instance.Text(44); } // layoutGroup.enabled = true; // layoutGroup.enabled = false; LayoutRebuilder.ForceRebuildLayoutImmediate(layoutGroup.GetComponent()); } } }