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