private void RefreshStreets(CityDto city, ServiceCompanyDto company)
 {
     StreetList.Clear();
     if (city == null)
     {
         return;
     }
     RequestService.GetStreets(city.Id, company?.Id).ToList().ForEach(s => StreetList.Add(s));
 }
 private void ChangeCity(int?cityId)
 {
     StreetList.Clear();
     if (!cityId.HasValue)
     {
         return;
     }
     foreach (var street in _requestService.GetStreets(cityId.Value).OrderBy(s => s.Name))
     {
         StreetList.Add(street);
     }
     OnPropertyChanged(nameof(StreetList));
 }
예제 #3
0
        private void EditAddress()
        {
            if (RequestId == 0)
            {
                return;
            }
            var model = new EditAddressOnRequestDialogViewModel(RequestId);
            var view  = new EditAddressOnRequestDialog();

            view.DataContext = model;
            view.Owner       = Application.Current.MainWindow;
            model.SetView(view);
            if (view.ShowDialog() != true)
            {
                return;
            }
            SelectedCity   = CityList.FirstOrDefault(c => c.Id == model.SelectedCity.Id);
            SelectedStreet = StreetList.FirstOrDefault(s => s.Id == model.SelectedStreet.Id);
            SelectedHouse  = HouseList.FirstOrDefault(h => h.Id == model.SelectedHouse.Id);
            SelectedFlat   = FlatList.FirstOrDefault(f => f.Id == model.SelectedFlat.Id);
            _requestService.RequestChangeAddress(RequestId, model.SelectedFlat.Id);
        }
        private void CompositionTarget_Rendering(object sender, System.EventArgs e)
        {
            DateTime end      = DateTime.UtcNow;
            TimeSpan timeDiff = end - start;

            if (experimentStarted)
            {
                carTimeDiff            = end - experimentTime;
                TimeOfCarLabel.Content = Convert.ToDouble(carTimeDiff.TotalMilliseconds / 1000.0);
            }

            StopWatchLabel.Content = Convert.ToDouble(timeDiff.TotalMilliseconds / 1000.0);


            if (!isStart)
            {
                routeList     = new RouteList(this);
                trafficLights = new TrafficLightsList(this);
                streetList    = new StreetList(this);
                ColorAllTrafficLights();
            }
            else
            {
                ControlTrafficLights();
            }

            if (counter == 30 || !isStart)  //dodajemy nowy samochod kiedy mamy pewnosc, ze nie nalozy sie on na juz istniejaca elipse
            {
                isStart = true;
                Car       newCar    = new Car();
                Rectangle rectangle = new Rectangle();

                newCar.StartingRouteOfCar = routeList.routes[random.Next(0, routeList.routes.Count)];
                newCar.CurrentRouteOfCar  = newCar.StartingRouteOfCar;
                newCar.PostionX           = newCar.CurrentRouteOfCar.StartPoint.X;
                newCar.PostionY           = newCar.CurrentRouteOfCar.StartPoint.Y;
                rectangle.Height          = 8;
                rectangle.Width           = 8;
                rectangle.Fill            = colours.solidColorBrushes[random.Next(0, colours.solidColorBrushes.Count)];
                newCar.Vehicle            = rectangle;
                newCar.Id            = carIdSetter++;
                newCar.CurrentStreet = FindCurrentStreet(newCar);
                newCar.Direction     = newCar.CurrentRouteOfCar.StartingDirection;


                if (newCar.StartingRouteOfCar.Id == 9 && timeDiff.TotalSeconds > 100 && !experimentStarted)
                {
                    newCar.Vehicle.Fill = new SolidColorBrush()
                    {
                        Color = Color.FromRgb(255, 0, 102)
                    };
                    experimentCarId   = newCar.Id;
                    experimentTime    = DateTime.UtcNow;
                    experimentStarted = true;
                }

                cars.Add(newCar);
                ExpWithoutAlgCanvas.Children.Add(newCar.Vehicle);
                Canvas.SetTop(newCar.Vehicle, newCar.PostionY);
                Canvas.SetLeft(newCar.Vehicle, newCar.PostionX);
                counter = 0;
            }
            else
            {
                counter++;
            }
            //testowe



            cars.ForEach(c =>
            {
                if ((int)c.PostionX == (int)c.CurrentRouteOfCar.EndPoint.X && (int)c.PostionY == (int)c.CurrentRouteOfCar.EndPoint.Y)
                {
                    carsToRemove.Add(c);

                    if (c.Id == experimentCarId)
                    {
                        if (!isAlgorithm)
                        {
                            _mainWindow.TimeWithout.Content = Convert.ToDouble(carTimeDiff.TotalMilliseconds / 1000.0);
                            this.Close();
                            _mainWindow.Show();
                        }
                        else
                        {
                            _mainWindow.TimeWith.Content = Convert.ToDouble(carTimeDiff.TotalMilliseconds / 1000.0);
                            this.Close();
                            _mainWindow.Show();
                        }
                    }
                }
            });

            carsToRemove.ForEach(c =>
            {
                ExpWithoutAlgCanvas.Children.Remove(c.Vehicle);
                cars.Remove(c);
            });
            carsToRemove.Clear();

            cars.ForEach(car =>
            {
                switch (car.CurrentRouteOfCar.Id)
                {
                case 0:
                    if ((car.PostionY <= 320) || (car.PostionY > 320 && car.PostionY <= 326 && trafficLights.AllTraficLights[0].IsGreenLight) || car.PostionY > 326)
                    {
                        var orderOfCarsOnTheRoute = CalculateOrderOnRoute(car);
                        if (!CheckIfThereIsACarAhead(car, orderOfCarsOnTheRoute))
                        {
                            car.PostionY += distance;
                            car.Vehicle.SetValue(Canvas.TopProperty, car.PostionY);
                            car.CurrentStreet = FindCurrentStreet(car);
                            car.Direction     = Direction.South;
                        }
                    }
                    break;

                case 1:
                    if ((car.PostionY <= 320) || (car.PostionY > 320 && car.PostionY <= 326 && trafficLights.AllTraficLights[0].IsGreenLight) || (car.PostionY > 326 && car.PostionY < 330))
                    {
                        var orderOfCarsOnTheRoute = CalculateOrderOnRoute(car);
                        if (!CheckIfThereIsACarAhead(car, orderOfCarsOnTheRoute))
                        {
                            car.PostionY += distance;
                            car.Vehicle.SetValue(Canvas.TopProperty, car.PostionY);
                            car.CurrentStreet = FindCurrentStreet(car);
                            car.Direction     = Direction.South;
                        }
                    }
                    else if (car.PostionY >= 330)
                    {
                        car.CurrentRouteOfCar = routeList.routes[3];
                    }
                    break;

                case 2:
                    if ((car.StartingRouteOfCar.Id == 7 || car.StartingRouteOfCar.Id == 15) && car.PostionX > 549 && car.PostionX < 550)
                    {
                        car.CurrentRouteOfCar = routeList.routes.Find(r => r.Id == 7);
                    }
                    else if (car.StartingRouteOfCar.Id == 22 && car.PostionX > 945)
                    {
                        car.CurrentRouteOfCar = routeList.routes.Find(r => r.Id == 17);
                    }
                    else if (car.StartingRouteOfCar.Id == 23 && car.PostionX > 990)
                    {
                        car.CurrentRouteOfCar = routeList.routes.Find(r => r.Id == 16);
                    }
                    else if (car.PostionX < 40 || (car.PostionX >= 40 && car.PostionX <= 45 && trafficLights.AllTraficLights[31].IsGreenLight) || (car.PostionX > 45 && car.PostionX <= 120) || (car.PostionX > 120 && car.PostionX <= 125 && trafficLights.AllTraficLights[29].IsGreenLight) || (car.PostionX > 125 && car.PostionX <= 167) || (car.PostionX > 167 && car.PostionX <= 172 && trafficLights.AllTraficLights[36].IsGreenLight) || (car.PostionX > 172 && car.PostionX <= 285) || (car.PostionX > 285 && car.PostionX <= 293 && trafficLights.AllTraficLights[37].IsGreenLight) || (car.PostionX > 293 && car.PostionX <= 493) || (car.PostionX > 493 && car.PostionX <= 499 && trafficLights.AllTraficLights[21].IsGreenLight) || (car.PostionX > 499 && car.PostionX <= 756) || (car.PostionX > 756 && car.PostionX <= 764 && trafficLights.AllTraficLights[14].IsGreenLight) || (car.PostionX > 764 && car.PostionX <= 930) || (car.PostionX > 930 && car.PostionX <= 935 && trafficLights.AllTraficLights[12].IsGreenLight) || car.PostionX > 935)
                    {
                        var orderOfCarsOnTheRoute = CalculateOrderOnRoute(car);
                        if (!CheckIfThereIsACarAhead(car, orderOfCarsOnTheRoute))
                        {
                            car.PostionX += distance;
                            car.Vehicle.SetValue(Canvas.LeftProperty, car.PostionX);
                            car.CurrentStreet = FindCurrentStreet(car);
                            car.Direction     = Direction.East;
                        }
                    }
                    break;

                case 3:
                    if (car.StartingRouteOfCar.Id == 14 && car.PostionX > 549 && car.PostionX < 550)
                    {
                        car.CurrentRouteOfCar = routeList.routes.Find(r => r.Id == 7);
                    }
                    else if (car.PostionX >= 1030 || (car.PostionX < 1030 && car.PostionX >= 1025 && trafficLights.AllTraficLights[7].IsGreenLight) || (car.PostionX < 1025 && car.PostionX >= 808) || (car.PostionX < 808 && car.PostionX >= 803 && trafficLights.AllTraficLights[39].IsGreenLight) || (car.PostionX < 803 && car.PostionX >= 564) || (car.PostionX < 564 && car.PostionX >= 559 && trafficLights.AllTraficLights[5].IsGreenLight) || (car.PostionX < 559 && car.PostionX >= 323) || (car.PostionX < 323 && car.PostionX >= 318 && trafficLights.AllTraficLights[38].IsGreenLight) || (car.PostionX < 318 && car.PostionX >= 204) || (car.PostionX < 204 && car.PostionX >= 199 && trafficLights.AllTraficLights[40].IsGreenLight) || (car.PostionX < 199 && car.PostionX >= 154) || (car.PostionX < 154 && car.PostionX >= 149 && trafficLights.AllTraficLights[3].IsGreenLight) || (car.PostionX < 149 && car.PostionX >= 76) || (car.PostionX < 76 && car.PostionX >= 71 && trafficLights.AllTraficLights[1].IsGreenLight) || car.PostionX < 71)
                    {
                        var orderOfCarsOnTheRoute = CalculateOrderOnRoute(car);
                        if (!CheckIfThereIsACarAhead(car, orderOfCarsOnTheRoute))
                        {
                            car.PostionX -= distance;
                            car.Vehicle.SetValue(Canvas.LeftProperty, car.PostionX);
                            car.CurrentStreet = FindCurrentStreet(car);
                            car.Direction     = Direction.West;
                        }
                    }
                    break;

                case 4:
                    if (car.PostionY > 405 || (car.PostionY < 405 && car.PostionY > 400 && trafficLights.AllTraficLights[30].IsGreenLight) || car.PostionY < 400)
                    {
                        var orderOfCarsOnTheRoute = CalculateOrderOnRoute(car);
                        if (!CheckIfThereIsACarAhead(car, orderOfCarsOnTheRoute))
                        {
                            car.PostionY -= distance;
                            car.Vehicle.SetValue(Canvas.TopProperty, car.PostionY);
                            car.CurrentStreet = FindCurrentStreet(car);
                            car.Direction     = Direction.North;
                        }
                    }
                    break;

                case 7:
                    if ((car.PostionY <= 320 && car.PostionX == 50) || (car.PostionY > 320 && car.PostionY <= 326 && trafficLights.AllTraficLights[0].IsGreenLight && car.PostionX == 50) || (car.PostionY > 326 && car.PostionY < 370 && car.PostionX == 50))
                    {
                        var orderOfCarsOnTheRoute = CalculateOrderOnRoute(car);
                        if (!CheckIfThereIsACarAhead(car, orderOfCarsOnTheRoute))
                        {
                            car.PostionY += distance;
                            car.Vehicle.SetValue(Canvas.TopProperty, car.PostionY);
                            car.CurrentStreet = FindCurrentStreet(car);
                            car.Direction     = Direction.South;
                        }
                    }
                    else if (car.PostionY >= 370 && car.PostionX == 50)
                    {
                        car.CurrentRouteOfCar = routeList.routes.Find(r => r.Id == 2);
                    }
                    else
                    {
                        var orderOfCarsOnTheRoute = CalculateOrderOnRoute(car);
                        if (!CheckIfThereIsACarAhead(car, orderOfCarsOnTheRoute))
                        {
                            car.PostionY -= distance;
                            car.Vehicle.SetValue(Canvas.TopProperty, car.PostionY);
                            car.CurrentStreet = FindCurrentStreet(car);
                            car.Direction     = Direction.North;
                        }
                    }
                    break;

                case 9:
                    if ((car.PostionY <= 320) || (car.PostionY > 320 && car.PostionY <= 326 && trafficLights.AllTraficLights[0].IsGreenLight) || (car.PostionY > 326 && car.PostionY < 370))
                    {
                        var orderOfCarsOnTheRoute = CalculateOrderOnRoute(car);
                        if (!CheckIfThereIsACarAhead(car, orderOfCarsOnTheRoute))
                        {
                            car.PostionY += distance;
                            car.Vehicle.SetValue(Canvas.TopProperty, car.PostionY);
                            car.CurrentStreet = FindCurrentStreet(car);
                            car.Direction     = Direction.South;
                        }
                    }
                    else if (car.PostionY >= 370)
                    {
                        car.CurrentRouteOfCar = routeList.routes.Find(r => r.Id == 2);
                    }
                    break;

                case 12:
                    if ((car.PostionY <= 320) || (car.PostionY > 320 && car.PostionY <= 326 && trafficLights.AllTraficLights[4].IsGreenLight) || (car.PostionY > 326 && car.PostionY <= 370))
                    {
                        var orderOfCarsOnTheRoute = CalculateOrderOnRoute(car);
                        if (!CheckIfThereIsACarAhead(car, orderOfCarsOnTheRoute))
                        {
                            car.PostionY += distance;
                            car.Vehicle.SetValue(Canvas.TopProperty, car.PostionY);
                            car.CurrentStreet = FindCurrentStreet(car);
                            car.Direction     = Direction.South;
                        }
                    }
                    else if (car.PostionY > 370)
                    {
                        car.CurrentRouteOfCar = routeList.routes.Find(r => r.Id == 2);
                    }

                    break;

                case 13:
                    if ((car.PostionY <= 320) || (car.PostionY > 320 && car.PostionY <= 326 && trafficLights.AllTraficLights[4].IsGreenLight) || (car.PostionY > 326 && car.PostionY <= 330))
                    {
                        var orderOfCarsOnTheRoute = CalculateOrderOnRoute(car);
                        if (!CheckIfThereIsACarAhead(car, orderOfCarsOnTheRoute))
                        {
                            car.PostionY += distance;
                            car.Vehicle.SetValue(Canvas.TopProperty, car.PostionY);
                            car.CurrentStreet = FindCurrentStreet(car);
                            car.Direction     = Direction.South;
                        }
                    }
                    else if (car.PostionY > 330)
                    {
                        car.CurrentRouteOfCar = routeList.routes.Find(r => r.Id == 3);
                    }

                    break;

                case 14:
                    car.CurrentRouteOfCar = routeList.routes.Find(r => r.Id == 3);
                    break;

                case 15:
                    car.CurrentRouteOfCar = routeList.routes.Find(r => r.Id == 2);
                    break;

                case 16:
                    if (car.StartingRouteOfCar.Id == 20 && car.PostionY < 330)
                    {
                        car.CurrentRouteOfCar = routeList.routes.Find(r => r.Id == 3);
                    }
                    else if (car.StartingRouteOfCar.Id == 21 && car.PostionY < 370)
                    {
                        car.CurrentRouteOfCar = routeList.routes.Find(r => r.Id == 2);
                    }
                    else if ((car.PostionY > 760) || (car.PostionY <= 760 && car.PostionY > 755 && trafficLights.AllTraficLights[9].IsGreenLight) || (car.PostionY <= 755 && car.PostionY > 405) || (car.PostionY <= 405 && car.PostionY > 400 && trafficLights.AllTraficLights[8].IsGreenLight) || car.PostionY <= 400)
                    {
                        var orderOfCarsOnTheRoute = CalculateOrderOnRoute(car);
                        if (!CheckIfThereIsACarAhead(car, orderOfCarsOnTheRoute))
                        {
                            car.PostionY -= distance;
                            car.Vehicle.SetValue(Canvas.TopProperty, car.PostionY);
                            car.CurrentStreet = FindCurrentStreet(car);
                            car.Direction     = Direction.North;
                        }
                    }
                    break;

                case 17:
                    if (car.StartingRouteOfCar.Id == 18 && car.PostionY > 330)
                    {
                        car.CurrentRouteOfCar = routeList.routes.Find(r => r.Id == 3);
                    }
                    else if (car.StartingRouteOfCar.Id == 19 && car.PostionY > 370)
                    {
                        car.CurrentRouteOfCar = routeList.routes.Find(r => r.Id == 2);
                    }
                    else if ((car.PostionY <= 320) || (car.PostionY > 320 && car.PostionY <= 326 && trafficLights.AllTraficLights[0].IsGreenLight) || (car.PostionY > 326 && car.PostionY <= 700) || (car.PostionY > 700 && car.PostionY <= 703 && trafficLights.AllTraficLights[11].IsGreenLight) || car.PostionY > 703)
                    {
                        var orderOfCarsOnTheRoute = CalculateOrderOnRoute(car);
                        if (!CheckIfThereIsACarAhead(car, orderOfCarsOnTheRoute))
                        {
                            car.PostionY += distance;
                            car.Vehicle.SetValue(Canvas.TopProperty, car.PostionY);
                            car.CurrentStreet = FindCurrentStreet(car);
                            car.Direction     = Direction.South;
                        }
                    }
                    break;

                case 18:
                    car.CurrentRouteOfCar = routeList.routes.Find(r => r.Id == 17);
                    break;

                case 19:
                    car.CurrentRouteOfCar = routeList.routes.Find(r => r.Id == 17);
                    break;

                case 20:
                    car.CurrentRouteOfCar = routeList.routes.Find(r => r.Id == 16);
                    break;

                case 21:
                    car.CurrentRouteOfCar = routeList.routes.Find(r => r.Id == 16);
                    break;

                case 22:
                    car.CurrentRouteOfCar = routeList.routes.Find(r => r.Id == 2);
                    break;

                case 23:
                    car.CurrentRouteOfCar = routeList.routes.Find(r => r.Id == 2);
                    break;

                default:
                    break;
                }
            });
        }