Newer
Older
DungeonShooting / DungeonShooting_Godot / src / game / role / enemy / state / AiTailAfterStateBase.cs
@小李xl 小李xl on 28 Nov 2022 1 KB 发现玩家, 并跟踪玩家

/// <summary>
/// AI 发现玩家
/// </summary>
public class AiTailAfterStateBase : StateBase<Enemy, AIStateEnum>
{
    
    private float _navigationUpdateTimer = 0;
    
    public AiTailAfterStateBase() : base(AIStateEnum.AITailAfter)
    {
    }

    public override void PhysicsProcess(float delta)
    {
        //跟随玩家
        var master = Master;
        if (master.NavigationAgent2D.IsNavigationFinished())
        {
            return;
        }
        var playerGlobalPosition = GameApplication.Instance.Room.Player.GlobalPosition;
        //临时处理, 让敌人跟随玩家
        if (_navigationUpdateTimer <= 0)
        {
            _navigationUpdateTimer = 0.2f;
            if (master.NavigationAgent2D.GetTargetLocation() != playerGlobalPosition)
            {
                master.NavigationAgent2D.SetTargetLocation(playerGlobalPosition);
            }
        }
        else
        {
            _navigationUpdateTimer -= delta;
        }
        
        var nextPos = master.NavigationAgent2D.GetNextLocation();
        master.LookTargetPosition(playerGlobalPosition);
        master.AnimatedSprite.Animation = AnimatorNames.Run;
        master.Velocity = (nextPos - master.GlobalPosition - master.NavigationPoint.Position).Normalized() * master.MoveSpeed;
        master.CalcMove(delta);
    }
}