LogicFighterManager.cs 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185
  1. using UnityEngine;
  2. using System;
  3. using System.Collections;
  4. using System.Collections.Generic;
  5. namespace YLBattle
  6. {
  7. /// <summary>
  8. /// 战斗对象管理
  9. /// </summary>
  10. public partial class LogicFighterManager : ILogicFighterOper
  11. {
  12. /// <summary>
  13. /// 上下文环境信息
  14. /// </summary>
  15. private BattleParam mEnv = null;
  16. /// <summary>
  17. /// 本次战斗所有人员,不会删减,保留原始数据
  18. /// </summary>
  19. private Dictionary<string, LogicFighter> mFighters = new Dictionary<string, LogicFighter>();
  20. /// <summary>
  21. /// 已死亡人员列表, 尸体消失后会移除
  22. /// </summary>
  23. private List<LogicFighter> mDeathFighterss = new List<LogicFighter>();
  24. /// <summary>
  25. /// 友情帮组的fighter [seat,fighterOjb]
  26. /// </summary>
  27. private Dictionary<int, LogicFighter> mFriendFighters = new Dictionary<int, LogicFighter>();
  28. /// <summary>
  29. /// 史上最简单的ID计数器
  30. /// </summary>
  31. private int mIdCalculate = 0;
  32. /// <summary>
  33. /// 实例id生成器
  34. /// </summary>
  35. private int mIdCreater = 0;
  36. /// <summary>
  37. /// 初始化
  38. /// </summary>
  39. /// <param name="env">上下文环境信息</param>
  40. public void Initialize(BattleParam env)
  41. {
  42. this.mEnv = env;
  43. this.mDeathFighterss.Clear();
  44. ///清空数据
  45. if (this.Env().reloadBlue)
  46. {
  47. this.mFighters.Clear();
  48. this.mFriendFighters.Clear();
  49. }
  50. else
  51. {
  52. List<string> removeLogicFighter = new List<string>();
  53. foreach (KeyValuePair<string, LogicFighter> kv in this.mFighters)
  54. {
  55. if (kv.Value.Team() == EBattleTeam.REDTEAM)
  56. {
  57. removeLogicFighter.Add(kv.Key);
  58. }
  59. }
  60. for (int i = 0; i < removeLogicFighter.Count; ++i)
  61. {
  62. this.mFighters.Remove(removeLogicFighter[i]);
  63. }
  64. }
  65. LogHelper.Log("准备本次参与的双方角色");
  66. ///初始化战斗对象
  67. int id = 0;
  68. LogicFighter fighter = null;
  69. if (this.mEnv.RealodBule())
  70. {
  71. List<int> mSetedSeat = new List<int>();
  72. for (int i = 0; i < this.Env().BlueTeam().Count; ++i)
  73. {
  74. id++;
  75. fighter = new LogicFighter();
  76. fighter.SetData(id.ToString(), this.Env(), this.Env().BlueTeam()[i], EBattleTeam.BLUETEAM, this.Env().BlueTeam()[i].Seat);
  77. this.mFighters.Add(fighter.ID(), fighter);
  78. // 2019 战斗系统 修改
  79. //this.mEnv.ShowAdapter().CreatLogicFighter(id.ToString(), EBattleTeam.BLUETEAM, this.Env().levelMode, this.Env().BlueTeam()[i]);
  80. ///记录已经站坑的位置
  81. mSetedSeat.Add(this.Env().BlueTeam()[i].Seat);
  82. }
  83. ///无援军
  84. if (this.Env().friend != null)
  85. {
  86. ///援军位置查询~
  87. if (mSetedSeat.Count < BattleConst.BattleBlueSeatMax)
  88. {
  89. int emptySeat = -1;
  90. for (int sindex = 0; sindex < this.mEnv.BattleTeamMaxFighter; sindex++)
  91. {
  92. if (mSetedSeat.Contains(sindex) == false)
  93. {
  94. emptySeat = sindex;
  95. break;
  96. }
  97. }
  98. if (emptySeat != -1)
  99. {
  100. this.SetFriendHelp(emptySeat);
  101. }
  102. }
  103. }
  104. }
  105. else
  106. {
  107. foreach (KeyValuePair<string, LogicFighter> kv in this.mFighters)
  108. {
  109. fighter = kv.Value;
  110. bool isFriend = false;
  111. if (this.mFriendFighters.ContainsKey(fighter.Seat()))
  112. {
  113. LogicFighter friend = this.mFriendFighters[fighter.Seat()];
  114. if (friend.ID() == fighter.ID())
  115. {
  116. fighter = friend;
  117. isFriend = true;
  118. }
  119. else
  120. {
  121. continue;
  122. }
  123. }
  124. // 2019 战斗系统 修改
  125. //this.mEnv.ShowAdapter().CreatLogicFighter(fighter.ID(), EBattleTeam.BLUETEAM, this.Env().levelMode, kv.Value.Adapter(), isFriend);
  126. }
  127. }
  128. ///敌方
  129. for (int j = 0; j < this.Env().RedTeam().Count; ++j)
  130. {
  131. id = this.mEnv.BattleTeamMaxFighter + j + 1;
  132. fighter = new LogicFighter();
  133. fighter.SetData(id.ToString(), this.Env(), this.Env().RedTeam()[j], EBattleTeam.REDTEAM, j);
  134. this.mFighters.Add(fighter.ID(), fighter);
  135. // 2019 战斗系统 修改
  136. //this.mEnv.ShowAdapter().CreatLogicFighter(id.ToString(), EBattleTeam.REDTEAM, this.Env().levelMode, this.Env().RedTeam()[j]);
  137. }
  138. }
  139. /// <summary>
  140. /// 返回战场上下文环境信息
  141. /// </summary>
  142. /// <returns>上下文环境信息</returns>
  143. public BattleParam Env()
  144. {
  145. return this.mEnv;
  146. }
  147. /// <summary>
  148. /// 周期调度
  149. /// </summary>
  150. /// <param name="now">逻辑帧时间</param>
  151. public void OnUpdate(long now)
  152. {
  153. // 2019 战斗系统 修改
  154. return;
  155. // 战斗对象帧周期调度
  156. foreach (KeyValuePair<string, LogicFighter> kv in this.mFighters)
  157. {
  158. kv.Value.GetState().OnUpdateState(now);
  159. }
  160. // 死亡对象调度
  161. for (int i = 0; i < this.mDeathFighterss.Count; ++i)
  162. {
  163. this.mDeathFighterss[i].GetState().OnUpdateState(now);
  164. }
  165. }
  166. }
  167. }