void UpdateOncomingCar(int carId) { // We scan each lane for (int i = 0; i < trucksInLane.Length; i++) { List <GameObject> trucks = trucksInLane[i]; bool foundCar = false; bool carsBehind = false; int foundInLaneIndex = -1; // For each of the trucks in the lane for (int j = 0; j < trucks.Count; j++) { CarController cc = trucks[j].GetComponent <CarController>(); // If the car is found if (cc.carId == carId) { // We remove it from the list trucks.Remove(trucks[j]); foundCar = true; // Do the removed car have cars behind it? carsBehind |= trucks.Count > 0; foundInLaneIndex = i; } } // If we removed a car and it had cars behind it if (foundCar && carsBehind) { // We update the removed car oncoming car, oncoming car :) int oncomingLaneId = (i + 2) % 4; // If there is an oncoming car in the lane opposite to the removed car if (trucksInLane[oncomingLaneId].Count > 0) { GameObject oncomingCar = trucksInLane[oncomingLaneId][0]; CarController occ = oncomingCar.GetComponent <CarController>(); occ.SetOncomingCar(trucksInLane[foundInLaneIndex][0]); occ.CarLog("I have a new opposite car!"); } } } }