Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / activity / role / ai / state / AiAstonishedState.cs
  1. using Godot;
  2.  
  3. namespace AiState;
  4.  
  5. /// <summary>
  6. /// 发现目标时的惊讶状态
  7. /// </summary>
  8. public class AiAstonishedState : StateBase<AiRole, AIStateEnum>
  9. {
  10. private float _timer;
  11. private object[] _args;
  12. //用于判断是否进入过惊讶状态
  13. private bool _flag = false;
  14. public AiAstonishedState() : base(AIStateEnum.AiAstonished)
  15. {
  16. }
  17.  
  18. public override void Enter(AIStateEnum prev, params object[] args)
  19. {
  20. if (args.Length == 0)
  21. {
  22. Debug.Log("进入 AINormalStateEnum.AiAstonished 状态必传入下一个状态做完参数!");
  23. ChangeState(prev);
  24. return;
  25. }
  26.  
  27. if (_flag)
  28. {
  29. ChangeNextState(args);
  30. return;
  31. }
  32.  
  33. _flag = true;
  34. _args = args;
  35. _timer = 0.6f;
  36. //播放惊讶表情
  37. if (Master.AnimationPlayer.HasAnimation(AnimatorNames.Astonished))
  38. {
  39. Master.AnimationPlayer.Play(AnimatorNames.Astonished);
  40. }
  41. }
  42.  
  43. public override void Process(float delta)
  44. {
  45. Master.DoIdle();
  46. _timer -= delta;
  47. if (_timer <= 0)
  48. {
  49. ChangeNextState(_args);
  50. }
  51. }
  52.  
  53. private void ChangeNextState(object[] args)
  54. {
  55. if (args.Length == 1)
  56. {
  57. ChangeState((AIStateEnum)args[0]);
  58. }
  59. else if (args.Length == 2)
  60. {
  61. ChangeState((AIStateEnum)args[0], args[1]);
  62. }
  63. }
  64. }