Newer
Older
HierarchicalFSM-Unity3D / Assets / Scripts / NPC / FSM / Actions / Combat / Ranged / EngagePlayerAction.cs
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using UnityEngine;
using UnityEngine.AI;

[CreateAssetMenu(menuName = "Finite State Machine/Action/Combat/Ranged/EngageTarget")]
public class EngagePlayerAction : Action
{
    [SerializeField] private LookAt lookAt;
    [SerializeField] private float targetDistance = 2.0f;
    [SerializeField] private float pathCalculationDelay = 0.2f;
    public override void Execute(FSM fsm)
    {
        NavMeshAgent agent = fsm.Controller.Agent;
        GameObject target = fsm.Controller.AgentFOV.GetTarget();
        Animator anim = fsm.Controller.Animator;

        //If the agent has a target
        if (target != null)
        {
            lookAt.SetTarget(target);
            lookAt.Execute(fsm);
            //fsm.StartCoroutine(CalculatePathToTarget(agent, target));

            agent.stoppingDistance = targetDistance;

            if (agent.stoppingDistance >= targetDistance)
            {
                agent.destination = target.transform.position;
            }
        }
    }

    private IEnumerator CalculatePathToTarget(NavMeshAgent agent, GameObject target)
    {
        yield return new WaitForSeconds(pathCalculationDelay);
        NavMeshPath path = new NavMeshPath();
        agent.CalculatePath(target.transform.position, path);
    }
}