CombatUpdateState.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
  2. using Core.Audio;
  3. using Fort23.Core;
  4. using GameLogic.Combat.CombatTool;
  5. using GameLogic.Combat.CombatType;
  6. using GameLogic.Combat.Hero;
  7. using UnityEngine;
  8. namespace GameLogic.Combat.CombatState
  9. {
  10. public class CombatUpdateState : CombatStateBasic
  11. {
  12. /// <summary>
  13. /// 下次遇见怪的时间
  14. /// </summary>
  15. private float _nextMonsterTime;
  16. /// <summary>
  17. /// 是否没有敌人
  18. /// </summary>
  19. protected bool isNullMonster;
  20. public CombatUpdateState(CombatController combatController) : base(combatController)
  21. {
  22. }
  23. protected override void ProEnter()
  24. {
  25. CombatController.CombatCameraControllder.isStop = false;
  26. CombatController.IsFightState = false;
  27. CombatController.GameTimeLineParticleFactory.RecycleAllFxAiLogicBasic();
  28. CombatHeroEntity playerHeroEntity = CombatController.currActiveCombat.playerHeroEntity;
  29. if (playerHeroEntity != null)
  30. {
  31. playerHeroEntity.CombatAIBasic.ChangeState(CombatHeroStateType.Flight,isQiangZhi:true);
  32. playerHeroEntity.CurrCombatHeroInfo.Shield = playerHeroEntity.MaxCombatHeroInfo.Shield;
  33. CombatCalculateTool.Instance.Recover(playerHeroEntity,
  34. playerHeroEntity.GetMainHotPoin<CombatHeroHitPoint>(), 999999, AttType.Normal, HarmType.Null,
  35. new TriggerData());
  36. }
  37. _nextMonsterTime = Random.Range(5, 10);
  38. isNullMonster = true;
  39. CombatController.MagicWeaponCombatSence.CloseSecene();
  40. CombatController.currActiveCombat.CombatCameraControllder.SetFieldOfView(70,1);
  41. AudioManager.Instance.PlayBGM("xunlongduobao.wav");
  42. }
  43. protected override void ProUpdate(float t)
  44. {
  45. CombatHeroEntity playerHeroEntity = CombatController.currActiveCombat.playerHeroEntity;
  46. if (playerHeroEntity == null)
  47. {
  48. return;
  49. }
  50. if (isNullMonster)
  51. {
  52. _nextMonsterTime -= t;
  53. if (_nextMonsterTime < 0)
  54. {
  55. _nextMonsterTime = Random.Range(PlayerManager.Instance.gameConstantConfig.GuajiCD[0], PlayerManager.Instance.gameConstantConfig.GuajiCD[1]);
  56. // EventSystemManager.Instance.DetectRandomEvents();
  57. EventManager.Instance.Dispatch(CustomEventType.DetectRandomEvent,null);
  58. }
  59. }
  60. CombatHeroEntity[] allHero =
  61. CombatController.currActiveCombat.CombatHeroController.GetHero(true,out int maxCount);
  62. if (maxCount > 0)
  63. {
  64. CombatController.ChangeState("fight");
  65. return;
  66. }
  67. float add = 0.1f;
  68. Vector3 pos = playerHeroEntity.dotPos;
  69. Vector3 dir = CombatController.currActiveCombat.CombatHeroController.moveDir;
  70. float fx = 1;
  71. pos += dir.normalized * CombatController.currActiveCombat.CombatHeroController.moveSpeed * t;
  72. playerHeroEntity.combatHeroGameObject.SetPosition(pos);
  73. playerHeroEntity.GameObject.transform.rotation = Quaternion.LookRotation(dir * fx);
  74. CombatController.CombatHeroController.Update(t);
  75. CombatController.CombatCameraControllder.Update(t);
  76. CombatController.GameTimeLineParticleFactory.CombatUpdate(t);
  77. }
  78. protected IHero FindMinDixtance(CombatHeroEntity[] allHero,int maxCount)
  79. {
  80. IHero minDistanceHero = null;
  81. if (allHero == null)
  82. {
  83. return null;
  84. }
  85. CombatHeroEntity playerHeroEntity = CombatController.currActiveCombat.playerHeroEntity;
  86. float minDistance = float.MaxValue;
  87. for (int i = 0; i < maxCount; i++)
  88. {
  89. CombatHeroEntity hero = allHero[i];
  90. if (hero.GetMainHotPoin<CombatHeroHitPoint>() == null)
  91. {
  92. continue;
  93. }
  94. float distance = Vector3.SqrMagnitude(hero.combatHeroGameObject.position -
  95. playerHeroEntity.combatHeroGameObject.position);
  96. if (distance < minDistance && distance < 225)
  97. {
  98. // if (!_combatHeroEntity.IsEnemy || distance < _combatHeroEntity.CurrCombatHeroInfo.maxDisTo + 100)
  99. {
  100. minDistance = distance;
  101. minDistanceHero = hero;
  102. }
  103. }
  104. }
  105. return minDistanceHero;
  106. }
  107. }
  108. }