using UnityEngine;
namespace Pathfinding {
///
/// Returns a path heading away from a specified point to avoid.
/// The search will terminate when G \> length (passed to the constructor) + FleePath.spread.
///
/// Can be used to make an AI to flee from an enemy (cannot guarantee that it will not be forced into corners though :D )
///
///
/// // Call a FleePath call like this, assumes that a Seeker is attached to the GameObject
/// Vector3 thePointToFleeFrom = Vector3.zero;
///
/// // The path will be returned when the path is over a specified length (or more accurately when the traversal cost is greater than a specified value).
/// // A score of 1000 is approximately equal to the cost of moving one world unit.
/// int theGScoreToStopAt = 10000;
///
/// // Create a path object
/// FleePath path = FleePath.Construct (transform.position, thePointToFleeFrom, theGScoreToStopAt);
/// // This is how strongly it will try to flee, if you set it to 0 it will behave like a RandomPath
/// path.aimStrength = 1;
/// // Determines the variation in path length that is allowed
/// path.spread = 4000;
///
/// // Get the Seeker component which must be attached to this GameObject
/// Seeker seeker = GetComponent();
///
/// // Start the path and return the result to MyCompleteFunction (which is a function you have to define, the name can of course be changed)
/// seeker.StartPath(path, MyCompleteFunction);
///
///
///
public class FleePath : RandomPath {
///
/// Default constructor.
/// Do not use this. Instead use the static Construct method which can handle path pooling.
///
public FleePath () {}
///
/// Constructs a new FleePath.
/// The FleePath will be taken from a pool.
///
public static FleePath Construct (Vector3 start, Vector3 avoid, int searchLength, OnPathDelegate callback = null) {
var p = PathPool.GetPath();
p.Setup(start, avoid, searchLength, callback);
return p;
}
protected void Setup (Vector3 start, Vector3 avoid, int searchLength, OnPathDelegate callback) {
Setup(start, searchLength, callback);
// Set the aim to a point in the opposite direction from the point we to avoid
// TODO: Why is this multiplication by 10 here?
// Might want to remove it
aim = start - (avoid-start)*10;
}
}
}