I’ve written the following code in Javascript in order to get an enemy to run away if underleveled, or chase if stronger. The problem is that the fleeing part of the script stops a short distance away and won’t move if the player gets close. Can anyone point out why:
var Waypoint : Transform[];
var speed : int = 20;
private var currentWP : int;
var loop : boolean = true;
var isChase: boolean = false;
var isRun: boolean = false;
// Our target
var Target: Transform;
//How slow we are
var Damp: float = 1.0;
//Are we out leveled?
var Outleveled: boolean = false;
//How close to detection
var detectionRange: int = 5;
var Height: float = 0;
function Awake(){
Height = transform.position.y;
}
function Update() {
transform.position.y = Height;
var FromPlayer: Vector2 = Vector2(Target.position.x - transform.position.x, 0);
var RunPlayer: Vector2 = Vector2(transform.position.x - Target.position.x, 0);
if(FromPlayer.magnitude <= detectionRange){
if(Outleveled){
isRun = true;
}
else{
isChase = true;
}
}
if(FromPlayer.magnitude >= detectionRange){
isChase = false;
isRun = false;
}
if(!isChase){
if(currentWP < Waypoint.length){
var target = Waypoint[currentWP].position;
var moveDirection : Vector2 = target - transform.position;
var velocity = rigidbody.velocity;
if (moveDirection.magnitude < 1){
currentWP++;
}
else {
velocity = moveDirection.normalized * speed;
}
}
else{
if(loop){
currentWP=0;
}
else{
velocity = Vector2.zero;
}
}
rigidbody.velocity = velocity;
}
if(isChase){
Chase();
}
if(isRun){
RunAway();
}
}
function Chase(){
var rotate = Quaternion.LookRotation(Target.position - transform.position, Vector3.up);
transform.rotation = Quaternion.Slerp(transform.rotation, rotate, Time.deltaTime * Damp);
transform.position = Vector2.Lerp(transform.position, Target.position,Time.deltaTime * Damp);
}
function RunAway(){
var rotate = Quaternion.LookRotation(transform.position - Target.position, Vector3.up);
transform.rotation = Quaternion.Slerp(transform.rotation, rotate, Time.deltaTime * Damp);
transform.position = Vector2.Lerp(transform.position, transform.position - Target.position,Time.deltaTime * Damp);
}