SkillUIComponent.cs 8.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214
  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. string lvTxt = "";
  143. //1级技能直接显示技能效果,从2级开始,UI上要显示 2级:技能效果描述
  144. if (i > 0)
  145. {
  146. lvTxt = LanguageManager.Instance.Text(41, skillInfos[i].skillConfig.level);
  147. }
  148. go.GetComponent<Text>().text = lvTxt + LanguageManager.Instance.Text(skillInfos[i].skillConfig.desc, data) + unLockConditionStr;
  149. go.GetComponent<Text>().color = color;
  150. go.SetActive(true);
  151. }
  152. // SkillInfo skillInfo = heroInfo.skillComponent.GetHighestLevel(groupID);
  153. txtSkillName.text = LanguageManager.Instance.Text(maxSkillUnLock.skillConfig.name);
  154. txtLv.text = maxSkillUnLock.skillConfig.level.ToString();
  155. txtCD.text = "冷却" + maxSkillUnLock.skillConfig.cd + "秒";
  156. //第一个技能就没有解锁时
  157. if (firstSkillLock != null)
  158. {
  159. SkillUpConfig firstSkillUpConfig = PlayerManager.Instance.heroController.GetSkillUpConfig(firstSkillLock.skillConfig.ID);
  160. if (firstSkillUpConfig.upType == 1)
  161. {
  162. // txtTips.text = "等级达到" + firstSkillUpConfig.upValue + "级后解锁";
  163. txtTips.text = LanguageManager.Instance.Text(38, firstSkillUpConfig.upValue);
  164. }
  165. else if (firstSkillUpConfig.upType == 2)
  166. {
  167. // txtTips.text = "星级达到" + firstSkillUpConfig.upValue + "星后解锁";
  168. txtTips.text = LanguageManager.Instance.Text(40, firstSkillUpConfig.upValue);
  169. }
  170. }
  171. // else
  172. // {
  173. // txtTips.text = "技能已达最高等级";
  174. // }
  175. if (maxLv)
  176. {
  177. txtTips.text = LanguageManager.Instance.Text(44);
  178. }
  179. // layoutGroup.enabled = true;
  180. // layoutGroup.enabled = false;
  181. LayoutRebuilder.ForceRebuildLayoutImmediate(layoutGroup.GetComponent<RectTransform>());
  182. }
  183. }
  184. }