public RoadDistance(Road road, double distance, bool endofmap)
     : this()
 {
     Distance = distance;
     EndOfMap = endofmap;
     Road = road;
 }
        public RoadLane(Road road, LaneDirection lanedirection, LaneType lanetype, int laneindex, double width,
                        double translation)
        {
            int colorindex;

            if (lanedirection == LaneDirection.Backward)
                colorindex = laneindex;
            else
                colorindex = -laneindex - 1;

            curvecolor = Colors.GetSaturatedColor(colorindex);
            ILaneContainer = road;
            LaneDirection = lanedirection;
            LaneIndex = laneindex;
            LaneType = lanetype;
            linecolor = road.LineColor;
            this.road = road;
            roadcolor = road.RoadColor;
            this.translation = translation;
            vehiclelist = new List<Vehicle>();
            Width = width;

            setbeziers();
            setgaplengths();

            Length = beziers.Sum(bezier => bezier.Length);
            spawndistance = 2*road.GetMaximumSpeed("Vehicle")/beziers[0].Length;
        }
        public void AddTrafficLight(Road road, TrafficLight trafficlight)
        {
            if (!roadlist.Contains(road))
            {
                roadlist.Add(road);
                trafficlightdictionary.Add(road, new List<TrafficLight>());
            }

            trafficlightdictionary[road].Add(trafficlight);
        }
 public RoadConnection(Road road, Dictionary<int, HashSet<RoadLaneIndex>> connectiondictionary)
     : this()
 {
     ConnectionDictionary = connectiondictionary;
     Road = road;
 }
        private Road GetRoadTo(Road source, Point point)
        {
            var roaddistancelist = new List<RoadDistance>();

            foreach (Road road in roadlist.Where(road => road != source))
            {
                double distance = road.GetOffwardCoordinate(location).DistanceTo(point);

                if (distance < road.Width)
                    return road;

                bool endofmap = (road.IsToward(location) && road.Previous == null) ||
                                (!road.IsToward(location) && road.Next == null);
                roaddistancelist.Add(new RoadDistance(road, distance, endofmap));
            }

            roaddistancelist = roaddistancelist.Where(roaddistance => !roaddistance.EndOfMap).ToList();
            double min = roaddistancelist.Min(roaddistance => roaddistance.Distance);
            roaddistancelist =
                roaddistancelist.Where(roaddistance => roaddistance.Distance < 1.2*min).ToList();

            if (roaddistancelist.Count > 1)
                roaddistancelist.Sort(
                    (r1, r2) => r1.Road.VehicleCount.CompareTo(r2.Road.VehicleCount));

            return roaddistancelist[0].Road;
        }
 public int GetLaneIndexTo(Road source, Point point)
 {
     Road exit = GetRoadTo(source, point);
     List<CrossingLane> sublanelist =
         lanelist.Where(
             crossinglane =>
             crossinglane.PreviousLane.Road == source && crossinglane.NextLane.Road == exit).ToList();
     return (sublanelist[0].PreviousLane.LaneIndex);
 }