LogicBattleFieldStateFighting.cs 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. public class LogicBattleFieldStateFighting : LogicBattleFieldState
  5. {
  6. public static LogicBattleFieldState Creator (LogicBattleField field)
  7. {
  8. return new LogicBattleFieldStateFighting (field);
  9. }
  10. public LogicBattleFieldStateFighting (LogicBattleField field)
  11. : base (field, LogicBattleFieldStateType.Fighting)
  12. {
  13. }
  14. float bossRangBeginTime = 0;
  15. bool notifyShowBossLeftTime = false;
  16. Fighter boss = null;
  17. public override void OnEnter ()
  18. {
  19. mField.Battle.StartOutput();
  20. //if (BattleMgr.Instance.Battle.IsPlayRecord || BattleMgr.Instance.Battle.IsKillingBoss)
  21. // DebugHelper.LogError("挑战 mapId:" + mField.BattleInfo.MapId + " levelId:" + mField.BattleInfo.LevelId);
  22. if (mField.killBoss)
  23. {
  24. bossRangBeginTime = GlobalConfig.Instance.GetConfigIntValue(GlobalConfig.c_enter_bossrage_time_configid);
  25. if (!string.IsNullOrEmpty(mField.BattleInfo.BattleBgm) && !mField.playingBattleMusic)
  26. {
  27. mField.playingBattleMusic = true;
  28. MusicMgr.Instance.PlayBGMusic(mField.BattleInfo.BattleBgm);
  29. }
  30. mField.Battle.FighterMgr.SetPveMark();
  31. }
  32. List<Fighter> fighters = mField.Fighters;
  33. for (int i = 0; i < fighters.Count; i++)
  34. {
  35. if (mField.Battle.IsPlayRecord)
  36. {
  37. mField.Battle.Recorder.ProcessFrameRecord(BattleRecorder.RecordType.FighterStartFighting, fighters[i]);
  38. }
  39. else
  40. {
  41. fighters[i].OnFightingStart();
  42. if (fighters[i].IsBoss)
  43. {
  44. boss = fighters[i];
  45. }
  46. }
  47. }
  48. mField.CheckFightersPassiveSkill();
  49. //刷新被动 buff
  50. mField.Battle.FighterMgr.FixedUpdate(0.0f);
  51. BattleMgr.Instance.OnFightingStart();
  52. mField.CheckFightersDropBuff();
  53. mField.CheckBuffs(BuffTriggerType.Trigger_Begin_Fighting);
  54. }
  55. public override void OnLeave ()
  56. {
  57. if(BattleMgr.Instance.Battle.IsPlayRecord)
  58. {
  59. BattleMgr.Instance.OnReplayEnd();
  60. }
  61. mField.Battle.EndOutput();
  62. for (int idx =0; idx < mField.Fighters.Count;idx++)
  63. {
  64. Fighter fighter = mField.Fighters[idx];
  65. if (!fighter.IsDisposed && fighter.IsSpawned)
  66. fighter.OnFightingEnd();
  67. }
  68. if (!string.IsNullOrEmpty(mField.BattleInfo.BattleBgm))
  69. {
  70. mField.playingBattleMusic = false;
  71. if (mField.killBoss)
  72. {
  73. MusicMgr.Instance.PlayBGMusic(mField.Battle.BgMusic);
  74. }
  75. }
  76. //录像错误框
  77. if(mField.Battle.IsPlayRecord)
  78. CloseErrorMsgBox();
  79. }
  80. public override void Update (float deltaTime)
  81. {
  82. if (mField.killBoss)
  83. {
  84. if(!mField.Battle.IsPlayRecord)
  85. {
  86. if (!notifyShowBossLeftTime)
  87. {
  88. if (mField.FightingTime >= (bossRangBeginTime - 10))
  89. {
  90. EventMgr.DispatchEvent<bool>(new CoreEvent<bool>(ECoreEventType.EID_BEGIN_BOSS_RAGE_TIME, true));
  91. EventMgr.DispatchEvent<int>(new CoreEvent<int>(ECoreEventType.EID_SHOW_BOSS_RAGE_LEFTTIME, 10));
  92. notifyShowBossLeftTime = true;
  93. }
  94. }
  95. if (mField.FightingTime >= bossRangBeginTime && boss != null && !boss.StateData.IsRageStatus)
  96. {
  97. boss.OnEnterRage();
  98. }else if(notifyShowBossLeftTime)
  99. {
  100. if(boss.IsAlive)
  101. {
  102. int leftTime = (int)(bossRangBeginTime - mField.FightingTime);
  103. EventMgr.DispatchEvent<int>(new CoreEvent<int>(ECoreEventType.EID_SHOW_BOSS_RAGE_LEFTTIME, leftTime));
  104. }
  105. }
  106. }
  107. }
  108. else
  109. {
  110. if(BattleMgr.Instance.Battle.ChallengeBoss)
  111. {
  112. mField.PeaceEnd();
  113. //ChangeState(LogicBattleFieldStateType.End); //注释代码,PeaceEnd()已经包含状态切换
  114. return;
  115. }
  116. }
  117. mField.Battle.FighterMgr.FixedUpdate (deltaTime);
  118. if (mField.Result == FightingResult.None)
  119. mField.CheckFightingResult(mField.Battle);
  120. switch (mField.Result)
  121. {
  122. case FightingResult.Win:
  123. ChangeState (LogicBattleFieldStateType.Win);
  124. break;
  125. case FightingResult.Failed:
  126. ChangeState (LogicBattleFieldStateType.Failed);
  127. break;
  128. case FightingResult.Peace:
  129. ChangeState(LogicBattleFieldStateType.End);
  130. break;
  131. }
  132. }
  133. public override void OnDataChanged()
  134. {
  135. }
  136. bool CheckIsWinOnTimeout()
  137. {
  138. return false;
  139. }
  140. private void CloseErrorMsgBox()
  141. {
  142. LuaInterface.LuaState pLuaState = LuaMgr.GetMainState();
  143. if (null != pLuaState)
  144. {
  145. string strLuaClose = "ManagerContainer.LuaBattleMgr:CloseErrorQuitBattleMsgBox()";
  146. LuaMgr.GetMainState().DoString(strLuaClose);
  147. }
  148. }
  149. }