private void intersectionControl_TrafficLightClick(object sender, TrafficLightClickEventArgs e) { IntersectionControl intersection = (IntersectionControl)sender; TrafficLight trafficLight = intersection.GetTrafficLight(e.LaneId); if (trafficLight.State == SignalState.GO) { trafficLight.SwitchTo(SignalState.STOP); } else { trafficLight.SwitchTo(SignalState.GO); } }
/// <summary> /// Statistieken bijwerken. /// </summary> /// <param name="roadUser"></param> /// <param name="intersection"></param> private void UpdateStats(RoadUser roadUser, IntersectionControl intersection) { lastRoadUser = roadUser; lastIC = intersection; StatsTotal++; if (roadUser.MaxSpeed >= 4) { StatsTotalSpeed++; } if (roadUser.RedLight) { StatsTotalRedLight++; } if (intersection.IntersectionType == IntersectionType.TYPE_1) { StatsTotalPerIntersection[0]++; } else if (intersection.IntersectionType == IntersectionType.TYPE_2) { StatsTotalPerIntersection[1]++; } else if (intersection.IntersectionType == IntersectionType.TYPE_3) { StatsTotalPerIntersection[2]++; } else if (intersection.IntersectionType == IntersectionType.TYPE_4) { StatsTotalPerIntersection[3]++; } else if (intersection.IntersectionType == IntersectionType.TYPE_5) { StatsTotalPerIntersection[4]++; } else if (intersection.IntersectionType == IntersectionType.TYPE_RAILWAY) { StatsTotalPerIntersection[5]++; } }
/// <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); } } }