示例#1
0
        public void FullLoad(AbstractBuilding building)
        {
            int load = Math.Min(this.Capacity, building.Storage);

            building.Storage -= load;
            this.Load        += load;
        }
示例#2
0
        /// <summary>
        /// Добавляет информацию про жилые дома в коллекцию для определения коэффициентов участия в максимуме
        /// </summary>
        /// <param name="ElectrificationLevel">Уровень Электрификации</param>
        /// <param name="ab">Обновляемая коллекция</param>
        /// <returns></returns>
        public ObservableCollection <AbstractBuilding> GetUnitedApartmentBuildings(double ElectrificationLevel, ObservableCollection <AbstractBuilding> ab)
        {
            AbstractBuilding abstractBuilding = new AbstractBuilding();

            // Категория 1
            foreach (var uab in Building.UnitedApartmentBuildings.UnitedApartmentBuildingsCollection)
            {
                if (uab.ElectrificationLevel == ElectrificationLevel && ElectrificationLevel == 1)
                {
                    abstractBuilding.Type          = "Житлові будинки з електроплитами";
                    abstractBuilding.SideNote      = "0";
                    abstractBuilding.Id            = Building.UnitedApartmentBuildings.UnitedApartmentBuildingsCollection[0].Id;
                    abstractBuilding.ActivePower   = Building.UnitedApartmentBuildings.UnitedApartmentBuildingsCollection[0].BuildingActiveLoad;
                    abstractBuilding.ReactivePower = Building.UnitedApartmentBuildings.UnitedApartmentBuildingsCollection[0].BuildingReactiveLoad;
                    abstractBuilding.FullPower     = Building.UnitedApartmentBuildings.UnitedApartmentBuildingsCollection[0].BuildingFullLoad;
                }

                else if (uab.ElectrificationLevel == ElectrificationLevel && ElectrificationLevel == 3)
                {
                    abstractBuilding.Type = "Житлові будинки з газовими плитами або на твердому паливі";

                    abstractBuilding.Id            = Building.UnitedApartmentBuildings.UnitedApartmentBuildingsCollection[1].Id;
                    abstractBuilding.SideNote      = "1";
                    abstractBuilding.ActivePower   = Building.UnitedApartmentBuildings.UnitedApartmentBuildingsCollection[1].BuildingActiveLoad;
                    abstractBuilding.ReactivePower = Building.UnitedApartmentBuildings.UnitedApartmentBuildingsCollection[1].BuildingReactiveLoad;
                    abstractBuilding.FullPower     = Building.UnitedApartmentBuildings.UnitedApartmentBuildingsCollection[1].BuildingFullLoad;
                }
            }

            ab.Insert(0, abstractBuilding);
            return(ab);
        }
示例#3
0
 public MapTile(
     float height, MapTileType type, AbstractBuilding building = null
     )
 {
     Height   = height;
     Type     = type;
     Building = building;
 }
示例#4
0
        /// <summary>
        /// конверитрую освещение в формат для рассчёта коефициента участия в максимуме
        /// </summary>
        public void ConvertTotalLigtningToAbstractBuildings()
        {
            AbstractBuildings.Clear();
            AbstractBuilding ab = new AbstractBuilding();

            ab.ActivePower = DistrictTotalLightning;
            ab.FullPower   = ab.ActivePower;
            ab.Type        = "Освітлення мікрорайону";
            AbstractBuildings.Insert(0, ab);
        }
示例#5
0
        private void Build(AbstractBuildCapability buildCapability, AbstractBuilding building = null)
        {
            var newbuilding = buildCapability.Build(building);

            if (building == null)
            {
                AddBuilding(newbuilding);
            }
            else
            {
                RemoveBuilding(building);
                Buildings.Add(newbuilding);
                Buildables[building.Id] = newbuilding;
            }
        }
示例#6
0
        public Game(AbstractFactory factory)
        {
            this.vehicle          = factory.CreateVehicle();
            this.vehicle.Capacity = 10;

            for (int i = 0; i < 5; i++)
            {
                AbstractBuilding b = factory.CreateBuilding();
                b.X       = (i + 1) * 4;
                b.Y       = (i * 3);
                b.Storage = 100;

                this.buildings.Add(b);
            }
        }
示例#7
0
        public override AbstractBuilding Build(AbstractBuilding building)
        {
            DecoratorBuilding upgradedBarrack;

            if (building.GetType() == typeof(Barrack))
            {
                upgradedBarrack = new BarrackLevel1(building as Barrack);
            }
            else if (building.GetType() == typeof(BarrackLevel1))
            {
                upgradedBarrack = new BarrackLevel2(building as BarrackLevel1);
            }
            else
            {
                // throw new InvalidOperationException(String.Format("Building of type {0} doesn't exist.", building.GetType().Name));
                throw new InvalidOperationException(String.Format("Reached maximum upgrade level for building [{0}] {1}.", building.Id, building.GetType().Name));
            }

            return(upgradedBarrack);
        }
示例#8
0
    // Update is called once per frame
    void Update()
    {
        //Send ray from camera to mouseposition
        RaycastHit hit;
        Ray        ray = camera.ScreenPointToRay(Input.mousePosition);

        //Check if we hit something that's not a building
        if (Physics.Raycast(ray, out hit, Mathf.Infinity, layerMask))
        {
            //Set position to the place the ray hit
            objectToPlaceTemp.transform.position = hit.point;
            //Make the building be straight with terrain
            Vector3 up = hit.normal;
            m_MyQuaternion.SetFromToRotation(Vector3.up, up);
            float angle = Vector3.Angle(hit.normal, Vector3.up);
            objectToPlaceTemp.transform.rotation = m_MyQuaternion;

            //Roatate building with mouse scroll
            yRotation += Input.mouseScrollDelta.y;
            objectToPlaceTemp.transform.Rotate(Vector3.up, yRotation * 10f);

            //Make the temp a child of this object
            objectToPlaceTemp.transform.parent = this.transform;

            //Place the building if if building is not in another and angle is within range
            if (Input.GetButtonDown("Fire1") && canBePlaced && angle < maxSlope)
            {
                //Destroy the temp object
                Destroy(objectToPlaceTemp);
                //Activate and place building and subtract money
                objectToPlace.SetActive(true);
                AbstractBuilding building = objectToPlace.GetComponent <AbstractBuilding>();
                gameManager.BuyBuilding(building.price);
                GameObject newObject = Instantiate(objectToPlace, objectToPlaceTemp.transform.position, objectToPlaceTemp.transform.rotation);
                Destroy(newObject.GetComponent <CanBePlaced>());
                this.enabled = false;
            }
        }
    }
        public override AbstractBuilding Build(AbstractBuilding building)
        {
            DecoratorBuilding upgradedWorkshop;

            if (building.GetType() == typeof(BowWorkshop))
            {
                upgradedWorkshop = new BowWorkshopLevel1(building as BowWorkshop);
            }
            else if (building.GetType() == typeof(BowWorkshopLevel1))
            {
                upgradedWorkshop = new BowWorkshopLevel2(building as BowWorkshopLevel1);
            }
            else
            {
                // throw new InvalidOperationException(String.Format("Building of type {0} doesn't exist.", building.GetType().Name));
                throw new InvalidOperationException(String.Format("Reached maximum upgrade level for building [{0}] {1}.", building.Id, building.GetType().Name));
            }
            upgradedWorkshop.Id       = building.Id;
            upgradedWorkshop.Building = building;

            return(upgradedWorkshop);
        }
示例#10
0
        private void AddBuilding(AbstractBuilding building)
        {
            Buildings.Add(building);
            Buildables.Add(building.Id, building);

            foreach (var capability in building.BuildCapabilities)
            {
                if (!BuildCapabilities.ContainsKey(capability.Key))
                {
                    BuildCapabilities.Add(capability.Key, capability.Value);
                }
            }

            foreach (var capability in building.TrainCapabilities)
            {
                if (!TrainCapabilities.ContainsKey(capability.Key))
                {
                    TrainCapabilities.Add(capability.Key, capability.Value);
                }
            }

            building.UnderConstructionEvent += Building_UnderConstructionEvent;
            building.StartBuilding();
        }
 public abstract AbstractBuilding Build(AbstractBuilding building);
示例#12
0
 public void Unload(AbstractBuilding building)
 {
     building.Storage += this.Load;
     this.Load         = 0;
 }
示例#13
0
 public override AbstractBuilding Build(AbstractBuilding building)
 {
     return(new BowWorkshop(0, 0, 0));
 }
示例#14
0
 private void RemoveBuilding(AbstractBuilding building)
 {
     //TODO:unsubscribe from events
     Buildings.Remove(building);
 }
 public override AbstractBuilding Build(AbstractBuilding building)
 {
     return(new Barrack(0, 0, 0));
 }
示例#16
0
        public void DetermineCoefficientsOfParticipanceInMaximumLoad()
        {
            ConvertTotalLigtningToAbstractBuildings();
            // Создаю коллекцию специальніх обїектов для определения коеффициентов участия в максимуме

            // Создаю объекты и напоолняю их информацией соответсвтуюего жилого здания
            foreach (var cb in Building.CommercialBuildings)
            {
                AbstractBuilding abstractBuilding = new AbstractBuilding();
                AbstractBuildings.Insert(0, abstractBuilding);
                AbstractBuildings[0].Id            = cb.Id;
                AbstractBuildings[0].Type          = cb.TypeOfCommercial;//
                AbstractBuildings[0].SideNote      = cb.TypeSideNote;
                AbstractBuildings[0].ActivePower   = cb.ActiveLoad;
                AbstractBuildings[0].ReactivePower = cb.ReactiveLoad;
                AbstractBuildings[0].FullPower     = cb.FullLoad;
            }
            // Также добавляю туда обьекты соответствующие жилым зданиям
            AbstractBuildings = GetUnitedApartmentBuildings(3, AbstractBuildings);
            AbstractBuildings = GetUnitedApartmentBuildings(1, AbstractBuildings);
            // Нахожу максимальную нагрузку
            double maxLoad = AbstractBuildings.Max(ab => ab.FullPower);
            // Создаю объект который будет содержать информацию о здании с максимальной нагрузкой
            AbstractBuilding buildingWithMaxLoad = new AbstractBuilding();

            // Наполняю его информацией
            foreach (var ab in AbstractBuildings)
            {
                if (ab.FullPower == maxLoad)
                {
                    buildingWithMaxLoad = ab;
                    break;
                }
            }

            Console.WriteLine(buildingWithMaxLoad.FullPower);
            // Определяю нужный ряд в таблице коеффициентов участия в максимуме
            int row = 0;
            // Создаю таблицу
            CoefficientsOfMembershipInMaximum DbnTable = new CoefficientsOfMembershipInMaximum();

            // Сопоставляю значение в Заметке о типе с номером ряда в таблице

            // Если в здании с макс нагрузкой заметка о типе имеет такое же значение как номер строки , окончить цикл

            // Ограничиваю пользователя от невозможного события(потому что  если вдруг такой потребитель поадёт сюда, он нарушит логику процессов
            if (buildingWithMaxLoad.SideNote != "Особливий")
            {
                // Перечисляю случаи когда получен нужный ряд и пора остановиться.

                if (buildingWithMaxLoad.SideNote == "0")
                {
                    row = 0;
                }

                else if (buildingWithMaxLoad.SideNote == "1")
                {
                    row = 1;
                }

                else if (buildingWithMaxLoad.SideNote == "Їдальня" || buildingWithMaxLoad.SideNote == "Ресторани, кафе")
                {
                    row = 2;
                }
                // Школы и ПТУ
                else if (buildingWithMaxLoad.SideNote == "4" || buildingWithMaxLoad.SideNote == "5" || buildingWithMaxLoad.SideNote == "11")
                {
                    row = 3;
                }

                else if (buildingWithMaxLoad.SideNote == "Установи адміністративного управління, фінансові, проектно-конструкторські організації")
                {
                    row = 4;
                }

                else if (buildingWithMaxLoad.SideNote == "7" || buildingWithMaxLoad.SideNote == "8")
                {
                    row = 5;
                }

                else if (buildingWithMaxLoad.SideNote == "9")
                {
                    row = 6;
                }

                else if (buildingWithMaxLoad.SideNote == "10" || buildingWithMaxLoad.SideNote == "13")
                {
                    row = 8;
                }

                else if (buildingWithMaxLoad.SideNote == "Культові споруди")
                {
                    row = 9;
                }

                else if (buildingWithMaxLoad.SideNote == "12")
                {
                    row = 7;
                }

                // Ни одно здание не подходит пока что под определение комунального обслуживания
                else if (buildingWithMaxLoad.SideNote == "14")
                {
                    // Здания комунального обслуживания
                }

                else if (buildingWithMaxLoad.SideNote == "15")
                {
                    row = 9;
                }

                // Становится известен ряд
                Console.WriteLine(row);

                // Создаю условия выбора колонки в соответствии с примечанием
                // Создаю переменную содержащую номер колонки
                int column = 0;
                // Перебираю всю коллекцию
                foreach (var e in AbstractBuildings)
                {
                    if (e.SideNote == "Житлові будинки з електроплитами")
                    {
                        column = 0;
                    }
                    else if (e.SideNote == "Житлові будинки з газовими плитами або на твердому паливі")
                    {
                        column = 1;
                    }
                    else if (e.SideNote == "Їдальня")
                    {
                        column = 2;
                    }
                    else if (e.SideNote == "Ресторани, кафе")
                    {
                        column = 3;
                    }
                    else if (e.SideNote == "Установи адміністративного управління, фінансові, проектно-конструкторські організації")
                    {
                        column = 6;
                    }
                    else if (
                        e.SideNote == "4" ||
                        e.SideNote == "5" ||
                        e.SideNote == "7" ||
                        e.SideNote == "8" ||
                        e.SideNote == "9" ||
                        e.SideNote == "10" ||
                        e.SideNote == "11" ||
                        e.SideNote == "12" ||
                        e.SideNote == "13"
                        // Для комунальніх потребителей если они будут добавлені в будущем
                        || e.SideNote == "14")
                    {
                        column = Convert.ToInt32(e.SideNote);
                    }
                    else if (e.SideNote == "Культові споруди")
                    {
                        column = 15;
                    }


                    // Присваиваем значение коффициента участия в имаксимуме
                    e.CoefficientOfMax = DbnTable.CoefficientsOfMaximum[row, column];

                    if (e.SideNote == "Особливий")
                    {
                        e.CoefficientOfMax = 0.77;
                    }

                    else if (e.Type == "Освітлення мікрорайону")
                    {
                        e.CoefficientOfMax = 1;
                    }
                }
            }
        }