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); } } }