private void changelanewindup() { time -= 1; time /= bezierfactor; bezierindex = connection.EndBezierIndex; bezierfactor = speed/lane.Beziers[bezierindex].Length; time = connection.EndTime + time*bezierfactor; setlane(connection.EndLane, false); connection = null; }
// Wissel van baan protected virtual void changelane() { // Bepaal de Lane waar we heen willen wisselen. RoadLane nextlane = targetlaneindex < lane.LaneIndex ? roadlane.LeftLane : roadlane.RightLane; if (nextlane == null) return; double distance = roadlane.Road.GetMaximumSpeed("Vehicle")/lane.Beziers[bezierindex].Length/2; Vehicle[] vehicles = nextlane.GetVehiclesBetween(BackTimeIndex - distance, FrontTimeIndex + distance); // Zoek het overige verkeer. // Als we een gevaar voor het overige verkeer zouden zijn doen we het niet. if (!(vehicles.Length == 0 || (vehicles.Length == 1 && ((vehicles[0].FrontTimeIndex < BackTimeIndex && 0.98*speed > vehicles[0].Speed) || (vehicles[0].BackTimeIndex > FrontTimeIndex && speed < 0.98*vehicles[0].Speed))))) return; connection = new Connection(roadlane, nextlane, location, velocity, bezierindex, bezierfactor, speed, time); // Als we over verschillende Lanen moeten rijden of de dicht bij een Crossing zijn doen we het niet. if ((connection.EndBezierIndex == roadlane.Beziers.Length && roadlane.NextLaneCount > 0) || (connection.EndBezierIndex == roadlane.Beziers.Length - 1 && roadlane.NextLaneCount > 0 && connection.EndTime > 1 - 50/connection.EndLane.Beziers[connection.EndBezierIndex].Length)) { connection = null; return; } connection.EndLane.EnterLane(this); time = 0; }