Newer
Older
Dreamsturbia-Project-IADE-Unity3D / Assets / Scripts / AI / FSM / Actions / RunAwayAction.cs
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

[CreateAssetMenu(menuName = "Finite State Machine/Action/RunAway")]
public class RunAwayAction : Action
{
    [SerializeField] private float maxDistance;
    public override void Act(FiniteStateMachine fsm)
    {
        
        if (!fsm.positionsDictionary.HasKey("wp")) fsm.positionsDictionary.SetValue("wp", fsm.GetAgent().waypoints[0].transform.position);
        if (!fsm.booleanDictionary.HasKey("escaping")) fsm.booleanDictionary.SetValue("escaping", false);
        if (Vector3.Distance(fsm.transform.position, fsm.target.transform.position) < maxDistance || !fsm.booleanDictionary.GetValue("escaping"))
        {
            foreach(Waypoint wp in fsm.GetAgent().waypoints)
            {
                Debug.Log("Recalculating");
                if(Vector3.Distance(fsm.target.transform.position, wp.transform.position) > Vector3.Distance(fsm.target.transform.position, fsm.positionsDictionary.GetValue("wp")))
                {
                    fsm.positionsDictionary.SetValue("wp", wp.transform.position);
                }
            }
            fsm.GetAgent().SetDestination(fsm.positionsDictionary.GetValue("wp"));
            fsm.booleanDictionary.SetValue("escaping", true);
        }
    }
}