- using Godot;
-
- namespace AiState;
-
- /// <summary>
- /// 发现目标时的惊讶状态
- /// </summary>
- public class AiAstonishedState : StateBase<AiRole, AIStateEnum>
- {
- private float _timer;
- private object[] _args;
- //用于判断是否进入过惊讶状态
- private bool _flag = false;
-
- public AiAstonishedState() : base(AIStateEnum.AiAstonished)
- {
- }
-
- public override void Enter(AIStateEnum prev, params object[] args)
- {
- if (args.Length == 0)
- {
- Debug.Log("进入 AINormalStateEnum.AiAstonished 状态必传入下一个状态做完参数!");
- ChangeState(prev);
- return;
- }
-
- if (_flag)
- {
- ChangeNextState(args);
- return;
- }
-
- _flag = true;
- _args = args;
-
- _timer = 0.6f;
-
- //播放惊讶表情
- if (Master.AnimationPlayer.HasAnimation(AnimatorNames.Astonished))
- {
- Master.AnimationPlayer.Play(AnimatorNames.Astonished);
- }
- }
-
- public override void Process(float delta)
- {
- Master.DoIdle();
- _timer -= delta;
- if (_timer <= 0)
- {
- ChangeNextState(_args);
- }
- }
-
- private void ChangeNextState(object[] args)
- {
- if (args.Length == 1)
- {
- ChangeState((AIStateEnum)args[0]);
- }
- else if (args.Length == 2)
- {
- ChangeState((AIStateEnum)args[0], args[1]);
- }
- }
- }