Example #1
0
 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;
 }
Example #2
0
        // 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;
        }