LogicBattleFieldStateWin.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using UnityEngine;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. public class LogicBattleFieldStateWin : LogicBattleFieldState
  5. {
  6. public static LogicBattleFieldState Creator (LogicBattleField field)
  7. {
  8. return new LogicBattleFieldStateWin (field);
  9. }
  10. public LogicBattleFieldStateWin (LogicBattleField field)
  11. : base (field, LogicBattleFieldStateType.Win)
  12. {
  13. }
  14. float delayTime = 3;
  15. public override void OnEnter ()
  16. {
  17. for(int idx = 0; idx < mField.TeamFighters.Count;idx++)
  18. {
  19. if (mField.TeamFighters[idx].IsAlive)
  20. {
  21. mField.TeamFighters[idx].ForceIdle();
  22. }
  23. }
  24. if (mField.Battle.Recorder != null)
  25. {
  26. if (!mField.Battle.IsPlayRecord)
  27. {
  28. mField.Battle.Recorder.RecordBattleEnd(mField.IsWin);
  29. }
  30. else
  31. {
  32. mField.Battle.Recorder.CalculateReplayResult();
  33. }
  34. }
  35. mField.BattleInfo.HasPassed = mField.killBoss;
  36. if (!mField.Battle.IsPlayRecord)
  37. {
  38. if (mField.killBoss)
  39. delayTime = mField.BattleInfo.BossDelayEndTime;
  40. else
  41. delayTime = mField.BattleInfo.MonsterDelayEndTime;
  42. }
  43. else
  44. {
  45. delayTime = GlobalConfig.Instance.GetConfigIntValue(166);
  46. }
  47. }
  48. public override void OnLeave ()
  49. {
  50. }
  51. public override void Update (float deltaTime)
  52. {
  53. delayTime -= deltaTime;
  54. if (CheckAllFightersReady() && delayTime<=0)
  55. {
  56. ChangeState(LogicBattleFieldStateType.End);
  57. }
  58. }
  59. public override void OnDataChanged()
  60. {
  61. }
  62. bool CheckAllFightersReady()
  63. {
  64. List<Fighter> fighters = mField.Fighters;
  65. for (int i = 0; i < fighters.Count; i++)
  66. {
  67. Fighter fighter = fighters[i];
  68. if (fighter.IsDisposed || fighter.IsDestroy || null == fighter.Actor)
  69. continue;
  70. if (fighter.IsAlive)
  71. {
  72. if (mField.DisableWaitFighterReadyOnWin)
  73. ForceSetFighter (fighter);
  74. else if (!fighter.IsIdle)
  75. return false;
  76. }
  77. }
  78. return true;
  79. }
  80. void ForceSetFighter(Fighter fighter)
  81. {
  82. if (!fighter.IsIdle)
  83. fighter.ForceIdle ();
  84. }
  85. }