private void Chase(GameObject target) { if (motor.RotateTowards(target.transform.position, data.turnSpeed)) { // Do Nothing } else if (!CanMove(data.moveSpeed)) { avoidenceStage = AvoidenceStage.ObstacleDetected; } else { if (Vector3.SqrMagnitude(transform.position - target.transform.position) >= (closeEnough * closeEnough)) { motor.Move(data.moveSpeed); } } }
public void Avoid() { if (avoidenceStage == AvoidenceStage.ObstacleDetected) { // Rotate left motor.Rotate(-1 * data.turnSpeed); // If I can now move forward, move to stage 2! if (CanMove(data.moveSpeed)) { avoidenceStage = AvoidenceStage.AvoidingObstacle; // Set the number of seconds we will stay in Stage 2 exitTime = avoidenceTime; } } else if (avoidenceStage == AvoidenceStage.AvoidingObstacle) { // If we can move forward, do so if (CanMove(data.moveSpeed)) { // Subtract from our timer and move exitTime -= Time.deltaTime; motor.Move(data.moveSpeed); // If we have moved long enough, return to chase mode if (exitTime <= 0) { avoidenceStage = AvoidenceStage.NotAvoiding; } } else { avoidenceStage = AvoidenceStage.ObstacleDetected; } } }