public void FullLoad(AbstractBuilding building) { int load = Math.Min(this.Capacity, building.Storage); building.Storage -= load; this.Load += load; }
/// <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); }
public MapTile( float height, MapTileType type, AbstractBuilding building = null ) { Height = height; Type = type; Building = building; }
/// <summary> /// конверитрую освещение в формат для рассчёта коефициента участия в максимуме /// </summary> public void ConvertTotalLigtningToAbstractBuildings() { AbstractBuildings.Clear(); AbstractBuilding ab = new AbstractBuilding(); ab.ActivePower = DistrictTotalLightning; ab.FullPower = ab.ActivePower; ab.Type = "Освітлення мікрорайону"; AbstractBuildings.Insert(0, ab); }
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; } }
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); } }
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); }
// 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); }
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);
public void Unload(AbstractBuilding building) { building.Storage += this.Load; this.Load = 0; }
public override AbstractBuilding Build(AbstractBuilding building) { return(new BowWorkshop(0, 0, 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)); }
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; } } } }