CombatController.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. using System;
  2. using Common.Utility.CombatEvent;
  3. using Common.Utility.CombatTimer;
  4. using Core.Audio;
  5. using Core.Event.Event;
  6. using Core.State;
  7. using Fort23.Core;
  8. using GameLogic.Combat.CombatState;
  9. using GameLogic.Combat.CombatType;
  10. using GameLogic.Combat.Hero.HeroGPU;
  11. using GameLogic.CombatScenesTool;
  12. using UnityEngine;
  13. using Utility.CustomizeTimeLogic.FxLogic.TimeLineEvent;
  14. using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
  15. using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventLogic;
  16. namespace GameLogic.Combat.CombatTool
  17. {
  18. public class CombatController : ITimeLineAudio,IDisposable
  19. {
  20. public static CombatController currActiveCombat;
  21. public CombatHeroController CombatHeroController;
  22. public CombatCameraControllder CombatCameraControllder;
  23. public CombatTypeBasic CombatTypeBasic;
  24. protected StateControl stateControl;
  25. public CombatSenceController CombatSenceController;
  26. public GameTimeLineParticleFactory GameTimeLineParticleFactory;
  27. public bool isUpdate;
  28. /// <summary>
  29. /// 涨停游戏英雄AI行为
  30. /// </summary>
  31. public bool isStopAi;
  32. public float speed = 1;
  33. private bool _isFullUIShow;
  34. public CombatStateBasic CurrState
  35. {
  36. get { return stateControl.CurrIState as CombatStateBasic; }
  37. }
  38. public async CTask InitCombat(StartCombatInfo startCombatInfo)
  39. {
  40. TimeLineSingletonEventManager.Instance.AddTimeLineBasic(this);
  41. GameTimeLineParticleFactory = new GameTimeLineParticleFactory();
  42. TimeLineFxParticleTool.Instance.Init(GameTimeLineParticleFactory);
  43. currActiveCombat = this;
  44. stateControl = new StateControl();
  45. stateControl.AddState("idle", new CombatIdleState(this));
  46. stateControl.AddState("update", new CombatUpdateState(this));
  47. CombatSenceController = new CombatSenceController();
  48. await CombatSenceController.InitScenes();
  49. Camera camera = Camera.main;
  50. CombatCameraControllder = new CombatCameraControllder();
  51. CombatCameraControllder.Init(this, camera);
  52. CombatHeroController = new CombatHeroController();
  53. CombatHeroController.Init(this);
  54. switch (startCombatInfo.CombatType)
  55. {
  56. case CombatType.CombatType.TestCombat:
  57. CombatTypeBasic = new TestCombatType();
  58. break;
  59. case CombatType.CombatType.LevelBattle:
  60. CombatTypeBasic = new LevelBattleCombatType();
  61. break;
  62. }
  63. CombatTypeBasic.Init(this, startCombatInfo);
  64. await CombatTypeBasic.StartGame();
  65. ChangeState("update");
  66. isUpdate = true;
  67. EventManager.Instance.AddEventListener(CustomEventType.RefreshFull, RefreshFull);
  68. }
  69. private void RefreshFull(IEventData eventData)
  70. {
  71. RefreshFullEventData data = (RefreshFullEventData)eventData;
  72. _isFullUIShow = data.isFullShow;
  73. }
  74. public void ChangeState(string name)
  75. {
  76. stateControl.ChangeState(name);
  77. }
  78. public void Update(float t)
  79. {
  80. if (!isUpdate||_isFullUIShow)
  81. {
  82. return;
  83. }
  84. t *= speed;
  85. stateControl.Update(t);
  86. CombatTypeBasic?.Update(t);
  87. CombatTimerManager.Instance.ComabtUpdate(t);
  88. LateUpdate(t);
  89. }
  90. public void LateUpdate(float t)
  91. {
  92. CombatHeroController.LateUpdate(t);
  93. }
  94. public void PlayAudio(string audioName, bool isLoop)
  95. {
  96. AudioManager.Instance.PlayAudio(audioName, isLoop);
  97. }
  98. public void Dispose()
  99. {
  100. TimeLineSingletonEventManager.Instance.RemoveTimeLineBasic(this);
  101. CombatTypeBasic?.Dispose();
  102. CombatHeroController?.Dispose();
  103. CombatCameraControllder?.Dispose();
  104. CombatSenceController?.Dispose();
  105. GameTimeLineParticleFactory?.Dispose();
  106. EventManager.Instance.RemoveAllEventListener(CustomEventType.RefreshFull);
  107. }
  108. }
  109. }