SkillUIComponent.cs 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. using System.Collections.Generic;
  2. using System.Linq;
  3. using Core.Language;
  4. using Core.Utility;
  5. using Excel2Json;
  6. using GameLogic.Hero;
  7. using UnityEngine;
  8. using UnityEngine.UI;
  9. namespace Fort23.Mono
  10. {
  11. [UIBinding(prefab = "SkillUIComponent" )]
  12. public partial class SkillUIComponent : UIComponent
  13. {
  14. private void Init()
  15. {
  16. }
  17. public override void AddEvent()
  18. {
  19. }
  20. public override void DelEvent()
  21. {
  22. }
  23. public override void AddButtonEvent()
  24. {
  25. btnBack.onClick.AddListener(OnClickBack);
  26. }
  27. private void OnClickBack()
  28. {
  29. UIManager.Instance.DormancyGComponent(this);
  30. UIManager.Instance.DormancyAllGComponent<WidgetIconSkill>("WidgetIconSkill");
  31. }
  32. private HeroInfo heroInfo;
  33. public List<WidgetIconSkill> allSkillIcon = new List<WidgetIconSkill>();
  34. public async void InitUI(HeroInfo heroInfo)
  35. {
  36. this.heroInfo = heroInfo;
  37. int idx = 0;
  38. foreach (KeyValuePair<int,List<SkillInfo>> keyValuePair in heroInfo.SkillData.mySkillDic)
  39. {
  40. if (keyValuePair.Key == GlobalParam.Normal_Attack_Skill_Group_ID)
  41. {
  42. //普攻不需要生成相应的技能ICON
  43. continue;
  44. }
  45. SkillInfo skillInfo = heroInfo.SkillData.GetHighestLevelOr1(keyValuePair.Key);
  46. WidgetIconSkill widgetIconSkill = await UIManager.Instance.CreateGComponent<WidgetIconSkill>(null,
  47. poolName: "WidgetIconSkill", root: skillRoot);
  48. widgetIconSkill.InitWidget(skillInfo);
  49. allSkillIcon.Add(widgetIconSkill);
  50. //显示第一个技能的详情
  51. if (idx == 0)
  52. {
  53. ShowSkillDetail(keyValuePair.Key);
  54. }
  55. idx++;
  56. }
  57. }
  58. public void SetOtherBorder(WidgetIconSkill iconSkill)
  59. {
  60. foreach (WidgetIconSkill widgetIconSkill in allSkillIcon)
  61. {
  62. if (widgetIconSkill != iconSkill)
  63. {
  64. widgetIconSkill.imgBorder.color = Color.black;
  65. }
  66. }
  67. }
  68. public void ShowSkillDetail(int groupID)
  69. {
  70. List<SkillInfo> skillInfos = heroInfo.SkillData.mySkillDic[groupID];
  71. // skillInfos.Sort((SkillInfo x, SkillInfo y) => x.skillConfig.level.CompareTo(y.skillConfig.level));
  72. foreach (GameObject go in skillDesc)
  73. {
  74. go.SetActive(false);
  75. }
  76. // SkillInfo skillInfo = heroInfo.skillComponent.GetHighestLevel(groupID);
  77. //最高解锁的Skill
  78. SkillInfo maxSkillUnLock = skillInfos[0];
  79. //第一个未解锁的Skill
  80. SkillInfo firstSkillLock = null;
  81. bool maxLv = false;
  82. bool oneSet = true;
  83. int tmpLv = 0;
  84. for (int i = 0; i < skillInfos.Count; i++)
  85. {
  86. string unLockConditionStr = "";
  87. Color color = Color.white;
  88. if (skillInfos[i].isUnLock)
  89. {
  90. if (skillInfos[i].skillConfig.level > tmpLv)
  91. {
  92. tmpLv = skillInfos[i].skillConfig.level;
  93. maxSkillUnLock = skillInfos[i];
  94. }
  95. //最后一个技能也解锁了
  96. if (i >= skillInfos.Count - 1)
  97. {
  98. maxLv = true;
  99. }
  100. }
  101. else
  102. {
  103. //if (skillInfos[i].skillUpConfig.upType == 1)
  104. SkillUpConfig upConfig = PlayerManager.Instance.heroController.GetSkillUpConfig(skillInfos[i].skillConfig.ID);
  105. if (upConfig.upType == 1)
  106. {
  107. unLockConditionStr = LanguageManager.Instance.Text(42, upConfig.upValue);
  108. //if (i > 0 && oneSet) 的意思是:没有解锁的且不是1级的技能,这样的技能,只设置一次txtTips
  109. //只设置一次txtTips是满足需求的,给玩家说,下一级什么时候解锁,不限制的话,会提示最后一级什么时候解锁
  110. if (i > 0 && oneSet)
  111. {
  112. // txtTips.text = "等级达到" + firstSkillUpConfig.upValue + "级后解锁";
  113. oneSet = false;
  114. txtTips.text = LanguageManager.Instance.Text(37, upConfig.upValue);
  115. }
  116. }
  117. else if(upConfig.upType == 2)
  118. {
  119. unLockConditionStr = LanguageManager.Instance.Text(43, upConfig.upValue);
  120. //if (i > 0 && oneSet) 的意思是:没有解锁的且不是1级的技能,这样的技能,只设置一次txtTips
  121. //只设置一次txtTips是满足需求的,给玩家说,下一级什么时候解锁,不限制的话,会提示最后一级什么时候解锁
  122. if (i > 0 && oneSet)
  123. {
  124. // txtTips.text = "等级达到" + firstSkillUpConfig.upValue + "级后解锁";
  125. oneSet = false;
  126. txtTips.text = LanguageManager.Instance.Text(39, upConfig.upValue);
  127. }
  128. }
  129. color = new Color(0.65f, 0.65f, 0.65f);
  130. if (i == 0)
  131. {
  132. // once = false;
  133. firstSkillLock = skillInfos[i];
  134. }
  135. }
  136. GameObject go = skillDesc[i] as GameObject;
  137. // object[] data = new object[skillInfos[i].skillConfig.effectValue.Length];
  138. // for (int j = 0; j < skillInfos[i].skillConfig.effectValue.Length; j++)
  139. // {
  140. // data[j] = skillInfos[i].skillConfig.effectValue[j];
  141. // }
  142. object[] data = HeroUITools.GetSkillParam(skillInfos[i].skillConfig);
  143. string lvTxt = "";
  144. //1级技能直接显示技能效果,从2级开始,UI上要显示 2级:技能效果描述
  145. if (i > 0)
  146. {
  147. lvTxt = LanguageManager.Instance.Text(41, skillInfos[i].skillConfig.level);
  148. }
  149. go.GetComponent<Text>().text = lvTxt + LanguageManager.Instance.Text(skillInfos[i].skillConfig.desc, data) + unLockConditionStr;
  150. go.GetComponent<Text>().color = color;
  151. go.SetActive(true);
  152. }
  153. // SkillInfo skillInfo = heroInfo.skillComponent.GetHighestLevel(groupID);
  154. txtSkillName.text = LanguageManager.Instance.Text(maxSkillUnLock.skillConfig.name);
  155. txtLv.text = maxSkillUnLock.skillConfig.level.ToString();
  156. txtCD.text = "冷却" + maxSkillUnLock.skillConfig.cd + "秒";
  157. //第一个技能就没有解锁时
  158. if (firstSkillLock != null)
  159. {
  160. SkillUpConfig firstSkillUpConfig = PlayerManager.Instance.heroController.GetSkillUpConfig(firstSkillLock.skillConfig.ID);
  161. if (firstSkillUpConfig.upType == 1)
  162. {
  163. // txtTips.text = "等级达到" + firstSkillUpConfig.upValue + "级后解锁";
  164. txtTips.text = LanguageManager.Instance.Text(38, firstSkillUpConfig.upValue);
  165. }
  166. else if (firstSkillUpConfig.upType == 2)
  167. {
  168. // txtTips.text = "星级达到" + firstSkillUpConfig.upValue + "星后解锁";
  169. txtTips.text = LanguageManager.Instance.Text(40, firstSkillUpConfig.upValue);
  170. }
  171. }
  172. // else
  173. // {
  174. // txtTips.text = "技能已达最高等级";
  175. // }
  176. if (maxLv)
  177. {
  178. txtTips.text = LanguageManager.Instance.Text(44);
  179. }
  180. // layoutGroup.enabled = true;
  181. // layoutGroup.enabled = false;
  182. LayoutRebuilder.ForceRebuildLayoutImmediate(layoutGroup.GetComponent<RectTransform>());
  183. }
  184. }
  185. }