Example #1
0
        public async Task MethodWithDelayAsync(int milliseconds)
        {
            await Task.Delay(milliseconds);

            endResearch = true;
            MapObjects.Remove(objRes);
            Console.WriteLine("Исследование закончилось 😎😎😎😎");

            // ищем ближайщий объект
            int    minIndex = 0;
            double min      = 0;
            int    i        = 0;
            var    objOnMap = MapObjects.GetAll <ObjResearch>();

            foreach (var minDist in objOnMap)
            {
                if (min == 0)
                {
                    min = TestModule.Distance(submarine, minDist);
                    i++;
                    continue;
                }

                if (min > TestModule.Distance(submarine, minDist))
                {
                    min      = TestModule.Distance(submarine, minDist);
                    minIndex = i;
                }
                i++;
            }

            objRes = objOnMap[minIndex];
        }
Example #2
0
        public override void Update(long elapsedMilliseconds)
        {
            var deers  = MapObjects.GetAll <Deer>();
            var wolves = MapObjects.GetAll <Wolf>();

            foreach (var deer in deers)
            {
                //проверяю чтобы олени не вышли из полигона
                if (deer.Coordinate.X < _leftX - _barier || deer.Coordinate.Y < _downY - _barier)
                {
                    deer._speed = _deerSeed;
                }
                else if (deer.Coordinate.X > _rightX - _barier || deer.Coordinate.Y > _upY - _barier)
                {
                    deer._speed = -_deerSeed;
                }

                deer.MoveUpRight();
            }

            foreach (var wolf in wolves)
            {
                var nearestDeer = deers.Aggregate((deer1, deer2) =>
                                                  PointExtension.Distance((Point)wolf, (Point)deer1) < PointExtension.Distance((Point)wolf, (Point)deer2) ? deer1 : deer2);
                wolf.MoveUpRight(new Coordinate(nearestDeer.X, nearestDeer.Y));

                //Ищем ближайшего волка
                var minDistance = double.MaxValue;
                foreach (var _wolf in wolves.Where(_wolf =>
                                                   (PointExtension.Distance((Point)wolf, (Point)_wolf) < minDistance) &&
                                                   (PointExtension.Distance((Point)wolf, (Point)_wolf) > 0)))
                {
                    minDistance = (PointExtension.Distance((Point)wolf, (Point)_wolf));
                }

                if (minDistance < 250)
                {
                    if (wolf._flagPack == false)
                    {
                        Console.WriteLine(minDistance);
                        wolf.WolfInThePack();
                        wolf._flagPack = true;
                    }
                }
                else
                {
                    wolf._speed    = _wolfSpeed;
                    wolf._flagPack = false;
                }

                if (!wolf.CanEat(nearestDeer))
                {
                    continue;
                }
                MapObjects.Remove(nearestDeer);
                deers.Remove(nearestDeer);
                var newDeerCoordinate = GenerateCoordinatesAnimal(1)[0];
                MapObjects.Add(new Deer(newDeerCoordinate, 10));
            }
        }
Example #3
0
 public void RemoveMapUnit(IGameMapObject mapObject)
 {
     if (MapObjects.Contains(mapObject))
     {
         MapObjects.Remove(mapObject);
         mapObject.WorldPosition = new Vector3(-100, -100, -100);
     }
 }
        public void RemoveMapObject(BaseMapObject obj)
        {
            MapObjects.Remove(obj);

            if (obj is IInteractable interactable)
            {
                Interactables.Remove(interactable);
            }

            if (obj is User user)
            {
                Users.Remove(user);
            }
        }
Example #5
0
        public override void Update(long elapsedMilliseconds)
        {
            // List<Truck> trucks = MapObjects.GetAll<Truck>();
            List <Provider> Providers = MapObjects.GetAll <Provider>();
            List <Customer> Customers = MapObjects.GetAll <Customer>();
            var             truks     = MapObjects.GetAll <Truck>();

            if (truks.Count < 35 && Rand.MayBe(0.2))
            {
                var weight = Rand.GenerateInRange(250, 5000);
                MapObjects.Add(new Truck(new Coordinate(Providers[Rand.GenerateInRange(0, 17)].Coordinate), weight, Rand.GenerateInRange(80, 130), new Coordinate(Customers[Rand.GenerateInRange(0, 32)].Coordinate)));
                Console.WriteLine("Машина отправлена " + weight + " кг");
            }
            if (Rand.MayBe(0.001))
            {
                Console.WriteLine("Машина сломалась");
                MapObjects.Remove(truks[Rand.GenerateInRange(1, truks.Count - 1)]);
            }

            truks = MapObjects.GetAll <Truck>();
            foreach (var truck in truks)
            {
                if (!truck.InObj())
                {
                    truck.Move();
                }
                else if (truck.loaded)
                {
                    Console.WriteLine("Машина доехала до заказчика");
                    truck.loaded = false;
                    truck.goHome();
                }
                else if (!truck.loaded)
                {
                    Console.WriteLine("Машина приехала с заказа");

                    MapObjects.Remove(truck);
                }
            }



            //Console.WriteLine(MapObjects.GetAll<Truck>().Count);
        }
        public override void Update(long elapsedMilliseconds)
        {
            var waterPump           = MapObjects.Get <WaterPump>()[0];
            var treatmentFacilities = MapObjects.Get <TreatmentFacilities>()[0];
            var reservoir           = MapObjects.Get <Reservoir>()[0];
            var conduit             = MapObjects.GetAll <Conduit>();
            var users      = MapObjects.GetAll <User>();
            var riverWater = MapObjects.GetAll <RiverWater>();
            var cleanWater = MapObjects.GetAll <CleanWater>();

            // Проверяем не сломан ли насос
            if (!waterPump.CheckFailure())
            {
                if (reservoir._volumeOfWaterInTheReservoir < reservoir._minVolumeOfWater &&
                    waterFromRiver < reservoir._size - reservoir._volumeOfWaterInTheReservoir - 1000)
                {
                    var water = new RiverWater(new Coordinate(waterIntakeCoord),
                                               MoveValue(waterIntakeCoord, waterPumpCoord, 50));
                    MapObjects.Add(water);
                    waterFromRiver += rnd.Next(800, 1000);
                    Console.WriteLine($"Перемещение {waterFromRiver} литров воды в резервуары");
                }

                if (riverWater != null)
                {
                    if (errFlag)
                    {
                        Console.WriteLine("Насос в норме!");
                        errFlag = false;
                    }
                    foreach (var water in riverWater)
                    {
                        water.Move();
                        if (water.InPlace(waterPump))
                        {
                            Console.WriteLine("Насос пройден");
                            (water._moveX, water._moveY) =
                                MoveValue(waterPumpCoord, treatmentFacilitiesCoord, 200);
                        }

                        if (water.InPlace(treatmentFacilities))
                        {
                            Console.WriteLine("Система очистки пройдена");
                            (water._moveX, water._moveY) =
                                MoveValue(treatmentFacilitiesCoord, reservoirCoord, 50);
                        }

                        if (water.InPlace(reservoir))
                        {
                            reservoir.GetWater(waterFromRiver);
                            waterFromRiver = 0;
                            MapObjects.Remove(water);
                            Console.WriteLine($"В резервуаре {reservoir._volumeOfWaterInTheReservoir} тонн воды");
                        }
                    }
                }

                if (users == null)
                {
                    return;
                }
                {
                    foreach (var user in users)
                    {
                        if (user.flag)
                        {
                            continue;
                        }
                        var waterToUserCoord = user.GetNearestPoint(conduit);
                        var waterToUser      = new CleanWater(waterToUserCoord,
                                                              MoveValue(waterToUserCoord, user.Coordinate, rnd.Next(50, 150)));
                        MapObjects.Add(waterToUser);
                        user.flag = true;
                    }

                    if (cleanWater == null)
                    {
                        return;
                    }
                    foreach (var water in cleanWater)
                    {
                        foreach (var user in users.Where(user => water.InPlace(user)))
                        {
                            reservoir.ToGiveWaterOfUser(rnd.Next(5, 25));
                            MapObjects.Remove(water);
                            MapObjects.Remove(user);
                            var newUserCoord = GenerateCoordinatesUsers(1);
                            MapObjects.Add(new User(newUserCoord.ElementAt(0)));
                        }

                        water.Move();
                    }
                }
            }
            else
            {
                Console.WriteLine("Насос сломался!");
                errFlag        = true;
                waterFromRiver = 0;
                foreach (var river_water in riverWater)
                {
                    MapObjects.Remove(river_water);
                }
                foreach (var clean_water in cleanWater)
                {
                    MapObjects.Remove(clean_water);
                }

                foreach (var user in users)
                {
                    user.flag = false;
                }
            }
        }
Example #7
0
        public override void Update(long elapsedMilliseconds)
        {
            controller.changeTemperature();
            controller.checkLife();
            foreach (Temperature it in controller.tempList)
            {
                foreach (Rain rain in new List <Rain>(it.rains))
                {
                    if (rain.life <= 0)
                    {
                        MapObjects.Remove(rain);
                        it.rains.Remove(rain);
                    }
                    if (it.temperature < 0)
                    {
                        Ice ice = new Ice(rain.Coordinate);

                        MapObjects.Remove(rain);
                        it.rains.Remove(rain);

                        it.ices.Add(ice);
                        MapObjects.Add(ice);
                    }
                }
                foreach (Hail hail in new List <Hail>(it.hails))
                {
                    if (hail.life <= 0)
                    {
                        Rain rain = new Rain(hail.Coordinate);

                        MapObjects.Remove(hail);
                        it.hails.Remove(hail);

                        it.rains.Add(rain);
                        MapObjects.Add(rain);
                    }
                }
                foreach (Snow snow in new List <Snow>(it.snows))
                {
                    if (snow.life <= 0)
                    {
                        Rain rain = new Rain(snow.Coordinate);

                        MapObjects.Remove(snow);
                        it.snows.Remove(snow);

                        it.rains.Add(rain);
                        MapObjects.Add(rain);
                    }
                }
                foreach (Ice ice in new List <Ice>(it.ices))
                {
                    if (ice.life <= 0)
                    {
                        Rain rain = new Rain(ice.Coordinate);

                        MapObjects.Remove(ice);
                        it.ices.Remove(ice);

                        it.rains.Add(rain);
                        MapObjects.Add(rain);
                    }
                }
            }

            controller.createPrecipitation();

            foreach (Temperature it in controller.tempList)
            {
                foreach (Hail hail in it.hails)
                {
                    MapObjects.Add(hail);
                }
                foreach (Rain rain in it.rains)
                {
                    MapObjects.Add(rain);
                }
                foreach (Snow snow in it.snows)
                {
                    MapObjects.Add(snow);
                }
            }

            controller.printData();
        }
Example #8
0
 public void RemoveMapObject(MapObject mapObject)
 {
     MapObjects.Remove(mapObject);
 }
Example #9
0
        public override void Update(long elapsedMilliseconds)
        {
            int check = 0;

            for (int i = 0; i < MapObjects.GetAll <VitalFunctions>().Count; i++)
            {
                if (ospa.generate(MapObjects.GetAll <VitalFunctions>()[i]) == -1 && checkGenOspa)
                {
                    MapObjects.Add(new HumanVirus(new Coordinate(MapObjects.GetAll <VitalFunctions>()[i].X + 1, MapObjects.GetAll <VitalFunctions>()[i].Y + 1), "Оспа", "Airborne", 20, MapObjects.GetAll <VitalFunctions>()[i]));
                    Console.WriteLine("Вирус оспы появился на карте!");
                    checkGenOspa = false;
                    break;
                }
            }
            for (int i = 0; i < MapObjects.GetAll <VitalFunctions>().Count; i++)
            {
                if (animVirus.generate(MapObjects.GetAll <VitalFunctions>()[i]) == -1 && checkGenAnim)
                {
                    MapObjects.Add(new AnimalVirus(new Coordinate(MapObjects.GetAll <VitalFunctions>()[i].X + 1, MapObjects.GetAll <VitalFunctions>()[i].Y + 1), "Вирус животного", "Airborne", 20, MapObjects.GetAll <VitalFunctions>()[i]));
                    Console.WriteLine("Вирус животного появился на карте!");
                    checkGenAnim = false;
                    break;
                }
            }
            for (int i = 0; i < MapObjects.GetAll <VitalFunctions>().Count; i++)
            {
                if (univ.generate(MapObjects.GetAll <VitalFunctions>()[i]) == -1 && checkGenUniv)
                {
                    MapObjects.Add(new UniversalVirus(new Coordinate(MapObjects.GetAll <VitalFunctions>()[i].X + 1, MapObjects.GetAll <VitalFunctions>()[i].Y + 1), "Универсальный вирус", "Contact", 20, MapObjects.GetAll <VitalFunctions>()[i]));
                    Console.WriteLine("Универсальный вирус появился на карте!" + MapObjects.GetAll <UniversalVirus>()[0]);
                    checkGenUniv = false;
                    break;
                }
            }

            if (checkGenOspa == false && checkGenAnim == false && checkGenUniv == false)
            {
                //пытаться заразить всех оспой
                foreach (var vir in MapObjects.GetAll <HumanVirus>())
                {
                    foreach (var person in MapObjects.GetAll <VitalFunctions>())
                    {
                        if (vir.name == "Оспа")
                        {
                            if (vir.infect(person) == 2)
                            {
                                MapObjects.Add(new HumanVirus(new Coordinate(person.X + 1, person.Y + 1), "Оспа", "Airborne", 20, person));
                                Console.WriteLine("Вирус оспы добавлен на карту!");
                            }
                        }
                    }
                }
                //пытаться заразить всех животным вирусом
                foreach (var vir in MapObjects.GetAll <AnimalVirus>())
                {
                    foreach (var person in MapObjects.GetAll <VitalFunctions>())
                    {
                        if (vir.name == "Вирус животного")
                        {
                            if (vir.infect(person) == 2)
                            {
                                MapObjects.Add(new AnimalVirus(new Coordinate(person.X + 1, person.Y + 1), "Вирус животного", "Airborne", 20, person));
                                Console.WriteLine("Вирус животного добавлен на карту!");
                            }
                        }
                    }
                }
                //пытаться заразить всех универсальным вирусом
                foreach (var vir in MapObjects.GetAll <UniversalVirus>())
                {
                    foreach (var person in MapObjects.GetAll <VitalFunctions>())
                    {
                        if (vir.name == "Универсальный вирус")
                        {
                            if (vir.infect(person) == 2)
                            {
                                MapObjects.Add(new UniversalVirus(new Coordinate(person.X + 1, person.Y + 1), "Универсальный вирус", "Contact", 20, person));
                                Console.WriteLine("Универсальный вирус добавлен на карту!");
                            }
                        }
                    }
                }

                foreach (var person in MapObjects.GetAll <VitalFunctions>())
                {
                    if (person.infectionName == "Оспа")
                    {
                        Console.WriteLine("Количество человеческих вирусов на карте: " + MapObjects.GetAll <HumanVirus>().Count);
                        if (person.convalescence(ospa, animVirus, univ, 1) == -1)
                        {
                            Console.WriteLine(person + " вылечился");
                            foreach (var vir in MapObjects.GetAll <HumanVirus>())
                            {
                                if (vir.hum == person)
                                {
                                    Console.WriteLine("Вирус оспы удален с карты!");
                                    MapObjects.Remove(vir);
                                }
                            }
                        }
                    }
                    else if (person.infectionName == "Вирус животного")
                    {
                        Console.WriteLine("Количество животных вирусов на карте: " + MapObjects.GetAll <AnimalVirus>().Count);
                        if (person.convalescence(ospa, animVirus, univ, 2) == -1)
                        {
                            Console.WriteLine(person + " вылечился");
                            foreach (var vir in MapObjects.GetAll <AnimalVirus>())
                            {
                                if (vir.animal == person)
                                {
                                    Console.WriteLine("Вирус животного удален с карты!");
                                    MapObjects.Remove(vir);
                                }
                            }
                        }
                    }
                    else if (person.infectionName == "Универсальный вирус")
                    {
                        Console.WriteLine("Количество универсальных вирусов на карте: " + MapObjects.GetAll <UniversalVirus>().Count);
                        if (person.convalescence(ospa, animVirus, univ, 3) == -1)
                        {
                            Console.WriteLine(person + " вылечился");
                            foreach (var vir in MapObjects.GetAll <UniversalVirus>())
                            {
                                if (vir.who == person)
                                {
                                    Console.WriteLine("Универсальный вирус удален с карты!");
                                    MapObjects.Remove(vir);
                                }
                            }
                        }
                    }

                    int go = person.Move();
                    //идём в рандомное место
                    if (go == -1)
                    {
                        switch (new Random().Next(0, 4))
                        {
                        case 0:
                            person.CoordTo = new Coordinate(person.Coord.X + new Random().Next(0, 500), person.Coord.Y + new Random().Next(0, 500));
                            break;

                        case 1:
                            person.CoordTo = new Coordinate(person.Coord.X + new Random().Next(0, 500), person.Coord.Y - new Random().Next(0, 500));
                            break;

                        case 2:
                            person.CoordTo = new Coordinate(person.Coord.X - new Random().Next(0, 500), person.Coord.Y + new Random().Next(0, 500));
                            break;

                        case 3:
                            person.CoordTo = new Coordinate(person.Coord.X - new Random().Next(0, 500), person.Coord.Y - new Random().Next(0, 500));
                            break;
                        }
                    }
                }

                foreach (var vir in MapObjects.GetAll <HumanVirus>())
                {
                    vir.changeCoord();
                }
                foreach (var vir in MapObjects.GetAll <AnimalVirus>())
                {
                    vir.changeCoord();
                }
                foreach (var vir in MapObjects.GetAll <UniversalVirus>())
                {
                    vir.changeCoord();
                }
                foreach (var person in MapObjects.GetAll <VitalFunctions>())
                {
                    if (person.infected)
                    {
                        Console.WriteLine(person + " болен " + person.infectionName + " и имеет " + person.health + " здоровья");
                    }
                }
            }
            for (int i = 0; i < MapObjects.GetAll <VitalFunctions>().Count; i++)
            {
                if (!MapObjects.GetAll <VitalFunctions>()[i].infected)
                {
                    check++;
                }
                if (check == 7)
                {
                    Console.WriteLine("Все вылечились!");
                }
            }
        }
Example #10
0
 //Удаление самолета с карты
 public void RemoveAirplane(Airplane obj)
 {
     MapObjects.Remove(obj);
 }