CombatAIBasic.cs 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using Core.State;
  5. using GameLogic.Combat.CombatTool;
  6. using GameLogic.Combat.Hero;
  7. using GameLogic.Combat.Hero.State;
  8. using UnityEngine;
  9. using UnityEngine.AI;
  10. public class CombatAIBasic : IDisposable
  11. {
  12. public StateControl stateControl;
  13. public NavMeshAgent NavMeshAgent;
  14. protected CombatHeroEntity _combatHeroEntity;
  15. protected float _r = 5;
  16. /// <summary>
  17. /// 当前聚焦的目标
  18. /// </summary>
  19. public CombatHeroEntity currFocusTarget;
  20. public void Init(CombatHeroEntity combatHeroEntity, NavMeshAgent navMeshAgent)
  21. {
  22. _combatHeroEntity = combatHeroEntity;
  23. stateControl = new StateControl();
  24. NavMeshAgent = navMeshAgent;
  25. ProInitState();
  26. }
  27. protected void ProInitState()
  28. {
  29. stateControl.AddState(CombatHeroStateType.idle, new CombatHeroIdleState(_combatHeroEntity));
  30. stateControl.AddState(CombatHeroStateType.move, new CombatHeroMoveState(_combatHeroEntity));
  31. stateControl.AddState(CombatHeroStateType.att, new CombatHeroAttState(_combatHeroEntity));
  32. stateControl.AddState(CombatHeroStateType.dile, new CombatHeroDieState(_combatHeroEntity));
  33. }
  34. public void ChangeState(string name)
  35. {
  36. stateControl.ChangeState(name);
  37. }
  38. public void Update(float t)
  39. {
  40. CombatHeroEntity[] allHero =
  41. CombatController.currActiveCombat.CombatHeroController.GetHero(!_combatHeroEntity.IsEnemy);
  42. FindMinDixtance(allHero, out currFocusTarget);
  43. stateControl.Update(t);
  44. }
  45. protected void FindMinDixtance(CombatHeroEntity[] allHero, out CombatHeroEntity minDistanceHero)
  46. {
  47. minDistanceHero = null;
  48. if (allHero == null)
  49. {
  50. return;
  51. }
  52. float minDistance = float.MaxValue;
  53. for (int i = 0; i < allHero.Length; i++)
  54. {
  55. CombatHeroEntity hero = allHero[i];
  56. float distance = Vector3.Distance(hero.combatHeroGameObject.position,
  57. _combatHeroEntity.combatHeroGameObject.position);
  58. if (distance < minDistance)
  59. {
  60. minDistance = distance;
  61. minDistanceHero = hero;
  62. }
  63. }
  64. }
  65. public void Dispose()
  66. {
  67. // NavMeshAgent.enabled = false;
  68. _combatHeroEntity = null;
  69. stateControl.Dispose();
  70. stateControl = null;
  71. }
  72. }