// Calculates the completion percentage of given car with given completed last checkpoint. // This method will update the given checkpoint index accordingly to the current position. private float GetCompletePerc(CarController car, ref uint curCheckpointIndex) { //Already all checkpoints captured if (curCheckpointIndex >= checkpoints.Length) { return(1); } //Calculate distance to next checkpoint float checkPointDistance = Vector2.Distance(car.transform.position, checkpoints[curCheckpointIndex].transform.position); //Check if checkpoint can be captured if (checkPointDistance <= checkpoints[curCheckpointIndex].CaptureRadius) { curCheckpointIndex++; car.CheckpointCaptured(); //Inform car that it captured a checkpoint return(GetCompletePerc(car, ref curCheckpointIndex)); //Recursively check next checkpoint } else { //Return accumulated reward of last checkpoint + reward of distance to next checkpoint return(checkpoints[curCheckpointIndex - 1].AccumulatedReward + checkpoints[curCheckpointIndex].GetRewardValue(checkPointDistance)); } }