- Home /
 
A flaw in my 2d chase or flee script
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);
 
               }
I don't think the waypoint system is interfering, does anyone have suggestion?
Put a couple of print() or Debug.Log() statements in there to see which parts of your code are reached and which aren't.
Answer by DaveA · Jul 04, 2011 at 07:16 PM
It may be possible that isRun and isChase are both true at the same time? Try setting them opposite of each other where currently one is set true (set the other false).
I did but it's more of the same. I think the problem is the Run Away function function. It runs only once, but once it stops, it doesn't work properly again.
Your answer
 
             Follow this Question
Related Questions
Slowing Down When Sliding Across Walls 2 Answers
Horizontal axis not working after animation 1 Answer
Move Object Smoothly 1 Answer
Rigidbody.MovePosition doesn't move reliably? 1 Answer
car movement basics 5 Answers