SkillUIComponent.cs 9.2 KB

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