HeroController.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203
  1. using System.Collections.Generic;
  2. using Common.Utility.CombatEvent;
  3. using Core.Utility;
  4. using Fort23.Core;
  5. using Fort23.UTool;
  6. using GameLogic.Bag;
  7. namespace GameLogic.Hero
  8. {
  9. public class HeroController
  10. {
  11. /// <summary>
  12. /// 所有英雄
  13. /// </summary>
  14. public Dictionary<int, HeroInfo> allHeroDic = new Dictionary<int, HeroInfo>();
  15. /// <summary>
  16. /// 也可以叫主力(afk的共鸣英雄),替补英雄等级=主力英雄的最低等级(和afk一样的)
  17. /// 主力英雄不一定等于上阵英雄,主力英雄只是决定了共鸣等级
  18. /// </summary>
  19. public Dictionary<int, HeroInfo> heroDicInLead = new Dictionary<int, HeroInfo>(4);
  20. /// <summary>
  21. /// 后备英雄(共享等级)
  22. /// </summary>
  23. public Dictionary<int, HeroInfo> heroDicInBack = new Dictionary<int, HeroInfo>();
  24. public bool CanUpgrade(HeroInfo heroInfo)
  25. {
  26. return BagController.Instance.IsEnough(GlobalParam.Item_HeroExp_ID, heroInfo.powerUpConfig.levelUpExp);
  27. }
  28. /// <summary>
  29. /// 英雄升级逻辑,主要是改数据,不在这里做UI表现
  30. /// </summary>
  31. /// <param name="heroInfo"></param>
  32. public HeroUpFailType UpgradeHeroLogic(HeroInfo heroInfo)
  33. {
  34. if (PlayerManager.Instance.gameConstantConfig.maxLv <= heroInfo.level.Value)
  35. {
  36. LogTool.Log("已到达最高等级:" + PlayerManager.Instance.gameConstantConfig.maxLv);
  37. return HeroUpFailType.MaxLv;
  38. }
  39. if (BagController.Instance.DuctHeroExp(heroInfo.powerUpConfig.levelUpExp))
  40. {
  41. heroInfo.Upgrade();
  42. SendEvent(HeroUpType.Level, heroInfo, HeroUpFailType.Succeed);
  43. return HeroUpFailType.Succeed;
  44. }
  45. else
  46. {
  47. return HeroUpFailType.HeroExp;
  48. }
  49. }
  50. /// <summary>
  51. /// 发送英雄提升的事件
  52. /// </summary>
  53. /// <param name="upType">提升类型:升级、升星等.</param>
  54. private void SendEvent(HeroUpType upType, HeroInfo heroInfo, HeroUpFailType failType = HeroUpFailType.None)
  55. {
  56. HeroPowerUpEventData data = new HeroPowerUpEventData();
  57. data.heroModelID = heroInfo.modelID;
  58. data.upType = upType;
  59. data.failType = failType;
  60. PlayerManager.Instance.lastHeroInfo = heroInfo;
  61. EventManager.Instance.Dispatch(CustomEventType.HeroPowerUp, data);
  62. if (upType == HeroUpType.Level)
  63. {
  64. EventManager.Instance.Dispatch(CustomEventType.HeroLvUp, data);
  65. }
  66. else if (upType == HeroUpType.Promote)
  67. {
  68. EventManager.Instance.Dispatch(CustomEventType.HeroPromote, data);
  69. }
  70. }
  71. public void InitHeroes()
  72. {
  73. for (int i = 0; i < AccountFileInfo.Instance.playerData.HeroListData.Count; i++)
  74. {
  75. AccountFileInfo.HeroData heroData = AccountFileInfo.Instance.playerData.HeroListData[i];
  76. HeroInfo heroInfo = new HeroInfo();
  77. heroInfo.InitHero(heroData);
  78. AddHero(heroInfo);
  79. }
  80. }
  81. /// <summary>
  82. /// 获取英雄
  83. /// </summary>
  84. /// <param name="modelID">英雄ID modelID</param>
  85. /// <returns></returns>
  86. public CombatHeroInfo GetHeroInfo(int modelID)
  87. {
  88. if (allHeroDic.ContainsKey(modelID))
  89. {
  90. return allHeroDic[modelID];
  91. }
  92. LogTool.Error("没有这个英雄" + modelID);
  93. return null;
  94. }
  95. /// <summary>
  96. /// 添加英雄
  97. /// </summary>
  98. /// <param name="heroInfo"></param>
  99. public void AddHero(HeroInfo heroInfo)
  100. {
  101. if (heroInfo.isLead)
  102. {
  103. DeployHeroToLead(heroInfo);
  104. }
  105. else
  106. {
  107. DeployHeroToBack(heroInfo);
  108. }
  109. }
  110. /// <summary>
  111. /// 进入主力队伍
  112. /// </summary>
  113. /// <param name="heroInfo"></param>
  114. public void DeployHeroToLead(HeroInfo heroInfo)
  115. {
  116. if (heroDicInLead.Count >= GlobalParam.Max_Deploy_HERO)
  117. {
  118. return;
  119. }
  120. if (heroDicInLead.ContainsKey(heroInfo.modelID))
  121. {
  122. LogTool.Error("heroDicInLead不应该出现相同的英雄ID=" + heroInfo.modelID);
  123. return;
  124. }
  125. heroDicInLead.Add(heroInfo.modelID, heroInfo);
  126. heroInfo.isLead = true;
  127. allHeroDic.Add(heroInfo.modelID, heroInfo);
  128. }
  129. /// <summary>
  130. /// 更换主力
  131. /// </summary>
  132. /// <param name="heroInfo"></param>
  133. public void ChangeLeadHero(HeroInfo backHero, HeroInfo leadHero)
  134. {
  135. if (!heroDicInLead.ContainsKey(leadHero.modelID))
  136. {
  137. LogTool.Error("不是主力" + leadHero.modelID);
  138. return;
  139. }
  140. if (!heroDicInBack.ContainsKey(backHero.modelID))
  141. {
  142. LogTool.Error("不是替补" + backHero.modelID);
  143. return;
  144. }
  145. //从主力中移除,并加入后补
  146. heroDicInLead.Remove(leadHero.modelID);
  147. DeployHeroToBack(leadHero);
  148. //从后补中移除,并加入主力
  149. heroDicInBack.Remove(backHero.modelID);
  150. DeployHeroToLead(backHero);
  151. }
  152. /// <summary>
  153. /// 进入后备队伍(英雄背包)
  154. /// </summary>
  155. /// <param name="heroInfo"></param>
  156. public void DeployHeroToBack(HeroInfo heroInfo)
  157. {
  158. if (heroDicInBack.ContainsKey(heroInfo.modelID))
  159. {
  160. LogTool.Error("heroDicInBack不应该出现相同的英雄ID=" + heroInfo.modelID);
  161. return;
  162. }
  163. heroDicInBack.Add(heroInfo.modelID, heroInfo);
  164. heroInfo.isLead = false;
  165. allHeroDic.Add(heroInfo.modelID, heroInfo);
  166. }
  167. }
  168. }