Esempio n. 1
0
        /// <summary>
        /// Nieuwe roaduser spawnen
        /// </summary>
        public void SpawnRoadUser()
        {
            RoadUser newRoadUser    = null;
            int      totalRoadusers = 0;

            foreach (IntersectionControl ic in Intersections)
            {
                totalRoadusers += ic.RoadUsers.Count;
            }

            IntersectionControl intersection = Intersections[random.Next(6)];

            if (totalRoadusers < 300)
            {
                if (intersection.IntersectionType == IntersectionType.TYPE_1)
                {
                    switch (random.Next(4))
                    {
                    case 0:
                        //south inbound left pedestrian
                        newRoadUser = new Pedestrian(new Point(130, 405), 1);
                        newRoadUser.FaceTo(new Point(130, 0));
                        break;

                    case 1:
                        //south inbound left road
                        newRoadUser = pickRandomCar(216, 418);
                        newRoadUser.FaceTo(new Point(216, 0));
                        break;

                    case 2:
                        //south inbound right road
                        newRoadUser = pickRandomCar(244, 418);
                        newRoadUser.FaceTo(new Point(244, 0));
                        break;

                    case 3:
                        //south inbound right pedestrian
                        newRoadUser = new Pedestrian(new Point(266, 405), 1);
                        newRoadUser.FaceTo(new Point(266, 0));
                        break;
                    }
                }
                else if (intersection.IntersectionType == IntersectionType.TYPE_2)
                {
                    switch (random.Next(8))
                    {
                    case 0:
                        //north inbound left pedestrian
                        newRoadUser = new Pedestrian(new Point(266, -5), 1);
                        newRoadUser.FaceTo(new Point(266, 400));
                        break;

                    case 1:
                        //north inbound right lane
                        newRoadUser = pickRandomCar(156, -18);
                        newRoadUser.FaceTo(new Point(156, 400));
                        break;

                    case 2:
                        //north inbound left lane
                        newRoadUser = pickRandomCar(186, -18);
                        newRoadUser.FaceTo(new Point(186, 400));
                        break;

                    case 3:
                        //north inbound right pedestrian
                        newRoadUser = new Pedestrian(new Point(130, -5), 1);
                        newRoadUser.FaceTo(new Point(130, 400));
                        break;

                    case 4:
                        //west inbound left pedestrian
                        newRoadUser = new Pedestrian(new Point(-5, 130), 1);
                        newRoadUser.FaceTo(new Point(400, 130));
                        break;

                    case 5:
                        //west inbound left lane
                        newRoadUser = pickRandomCar(-18, 216);
                        newRoadUser.FaceTo(new Point(400, 216));
                        break;

                    case 6:
                        //west inbound right lane
                        newRoadUser = pickRandomCar(-18, 244);
                        newRoadUser.FaceTo(new Point(400, 244));
                        break;

                    case 7:
                        //west inbound right pedestrian
                        newRoadUser = new Pedestrian(new Point(-5, 266), 1);
                        newRoadUser.FaceTo(new Point(400, 266));
                        break;
                    }
                }
                else if (intersection.IntersectionType == IntersectionType.TYPE_3)
                {
                    switch (random.Next(8))
                    {
                    case 0:
                        //south inbound left pedestrian
                        newRoadUser = new Pedestrian(new Point(130, 405), 1);
                        newRoadUser.FaceTo(new Point(130, 0));
                        break;

                    case 1:
                        //south inbound left lane
                        newRoadUser = pickRandomCar(216, 418);
                        newRoadUser.FaceTo(new Point(216, 0));
                        break;

                    case 2:
                        //south inbound right lane
                        newRoadUser = pickRandomCar(244, 418);
                        newRoadUser.FaceTo(new Point(244, 0));
                        break;

                    case 3:
                        //south inbound right pedestrian
                        newRoadUser = new Pedestrian(new Point(266, 405), 1);
                        newRoadUser.FaceTo(new Point(266, 0));
                        break;

                    case 4:
                        //west inbound left pedestrian
                        newRoadUser = new Pedestrian(new Point(-5, 130), 1);
                        newRoadUser.FaceTo(new Point(400, 130));
                        break;

                    case 5:
                        //west inbound left lane
                        newRoadUser = pickRandomCar(-18, 216);
                        newRoadUser.FaceTo(new Point(400, 216));
                        break;

                    case 6:
                        //west inbound right lane
                        newRoadUser = pickRandomCar(-18, 244);
                        newRoadUser.FaceTo(new Point(400, 244));
                        break;

                    case 7:
                        //west inbound right pedestrian
                        newRoadUser = new Pedestrian(new Point(-5, 266), 1);
                        newRoadUser.FaceTo(new Point(400, 266));
                        break;
                    }
                }
                else if (intersection.IntersectionType == IntersectionType.TYPE_4)
                {
                    switch (random.Next(8))
                    {
                    case 0:
                        //south inbound left pedestrian
                        newRoadUser = new Pedestrian(new Point(130, 405), 1);
                        newRoadUser.FaceTo(new Point(130, 0));
                        break;

                    case 1:
                        //south inbound left lane
                        newRoadUser = pickRandomCar(216, 418);
                        newRoadUser.FaceTo(new Point(216, 0));
                        break;

                    case 2:
                        //south inbound right lane
                        newRoadUser = pickRandomCar(244, 418);
                        newRoadUser.FaceTo(new Point(244, 0));
                        break;

                    case 3:
                        //south inbound right pedestrian
                        newRoadUser = new Pedestrian(new Point(266, 405), 1);
                        newRoadUser.FaceTo(new Point(266, 0));
                        break;

                    case 4:
                        //east inbound left pedestrian
                        newRoadUser = new Pedestrian(new Point(405, 130), 1);
                        newRoadUser.FaceTo(new Point(0, 130));
                        break;

                    case 5:
                        //east inbound right lane
                        newRoadUser = pickRandomCar(418, 156);
                        newRoadUser.FaceTo(new Point(0, 156));
                        break;

                    case 6:
                        //east inbound left lane
                        newRoadUser = pickRandomCar(418, 186);
                        newRoadUser.FaceTo(new Point(0, 186));
                        break;

                    case 7:
                        //east inbound right pedestrian
                        newRoadUser = new Pedestrian(new Point(405, 266), 1);
                        newRoadUser.FaceTo(new Point(0, 266));
                        break;
                    }
                }
                else if (intersection.IntersectionType == IntersectionType.TYPE_5)
                {
                    switch (random.Next(4))
                    {
                    case 0:
                        //north inbound left pedestrian
                        newRoadUser = new Pedestrian(new Point(130, -5), 1);
                        newRoadUser.FaceTo(new Point(130, 400));
                        break;

                    case 1:
                        //north inbound right lane
                        newRoadUser = pickRandomCar(156, -18);
                        newRoadUser.FaceTo(new Point(156, 400));
                        break;

                    case 2:
                        //north inbound left lane
                        newRoadUser = pickRandomCar(186, -18);
                        newRoadUser.FaceTo(new Point(186, 400));
                        break;

                    case 3:
                        //north inbound right pedestrian
                        newRoadUser = new Pedestrian(new Point(266, -5), 1);
                        newRoadUser.FaceTo(new Point(266, 400));
                        break;
                    }
                }
                else if (intersection.IntersectionType == IntersectionType.TYPE_RAILWAY)
                {
                    switch (random.Next(4))
                    {
                    case 0:
                        //east inbound left pedestrian
                        newRoadUser = new Pedestrian(new Point(405, 130), 1);
                        newRoadUser.FaceTo(new Point(0, 130));
                        break;

                    case 1:
                        //east inbound right lane
                        newRoadUser = pickRandomCar(418, 156);
                        newRoadUser.FaceTo(new Point(0, 156));
                        break;

                    case 2:
                        //east inbound left lane
                        newRoadUser = pickRandomCar(418, 186);
                        newRoadUser.FaceTo(new Point(0, 186));
                        break;

                    case 3:
                        //east inbound right pedestrian
                        newRoadUser = new Pedestrian(new Point(405, 266), 1);
                        newRoadUser.FaceTo(new Point(0, 266));
                        break;
                    }
                }

                if (newRoadUser != null)
                {
                    intersection.AddRoadUser(newRoadUser);
                    UpdateStats(newRoadUser, intersection);
                }
            }
        }