Newer
Older
Dreamsturbia-Project-IADE-Unity3D / Assets / Scripts / AI / FSM / Actions / RunAwayAction.cs
  1. using System.Collections;
  2. using System.Collections.Generic;
  3. using UnityEngine;
  4. [CreateAssetMenu(menuName = "Finite State Machine/Action/RunAway")]
  5. public class RunAwayAction : Action
  6. {
  7. [SerializeField] private float maxDistance;
  8. public override void Act(FiniteStateMachine fsm)
  9. {
  10. if (!fsm.positionsDictionary.HasKey("wp")) fsm.positionsDictionary.SetValue("wp", fsm.GetAgent().waypoints[0].transform.position);
  11. if (!fsm.booleanDictionary.HasKey("escaping")) fsm.booleanDictionary.SetValue("escaping", false);
  12. if (Vector3.Distance(fsm.transform.position, fsm.target.transform.position) < maxDistance || !fsm.booleanDictionary.GetValue("escaping"))
  13. {
  14. foreach(Waypoint wp in fsm.GetAgent().waypoints)
  15. {
  16. Debug.Log("Recalculating");
  17. if(Vector3.Distance(fsm.target.transform.position, wp.transform.position) > Vector3.Distance(fsm.target.transform.position, fsm.positionsDictionary.GetValue("wp")))
  18. {
  19. fsm.positionsDictionary.SetValue("wp", wp.transform.position);
  20. }
  21. }
  22. fsm.GetAgent().SetDestination(fsm.positionsDictionary.GetValue("wp"));
  23. fsm.booleanDictionary.SetValue("escaping", true);
  24. }
  25. }
  26. }