/** * Intuitive logic: Organize the powerplants by cost (Ascending low -> high) and use the right amount to have the load. * **/ public static IEnumerable <ProductionVm> Calculate(PayloadVm payloads) { ICollection <ProductionVm> productionplans = new List <ProductionVm>(); foreach (var powerplant in payloads.Powerplants) { //Get the variable cost & update the P values powerplant.GetUnitCostAndUpdateP(payloads.Fuels); } //Rank Up the power plants according to cost metric payloads.Powerplants = payloads.Powerplants.OrderBy(x => x.UnitCost).ToList(); bool isPossible = payloads.Powerplants.Sum(x => x.Pmax) > payloads.Load; if (!isPossible) { return(null); } //Use the minimum of powerplants to produce the needed load double currentPowerPlantProduction = 0; double load = payloads.Load; for (int i = 0; i < payloads.Powerplants.Count; i++) { Powerplant currentPowerplant = payloads.Powerplants[i]; Powerplant nextPowerplant = null; if (i + 1 < payloads.Powerplants.Count) { nextPowerplant = payloads.Powerplants[i + 1]; } currentPowerPlantProduction = 0; if (load > 0) { if (load - currentPowerplant.Pmax >= 0) { //Check if the combinaison of the current powerplant and the next powerplant can produce all the current load amount. if (nextPowerplant != null && load < currentPowerplant.Pmax + nextPowerplant.Pmax && load - currentPowerplant.Pmax < nextPowerplant.Pmin) { currentPowerPlantProduction = currentPowerplant.Pmax - nextPowerplant.Pmin; } else { currentPowerPlantProduction = currentPowerplant.Pmax; } load -= currentPowerPlantProduction; } else if (load - currentPowerplant.Pmin >= 0) { currentPowerPlantProduction = load; load -= currentPowerPlantProduction; } } currentPowerPlantProduction = Math.Round(currentPowerPlantProduction, 1); productionplans.Add(new ProductionVm { PowerplantName = currentPowerplant.Name, Production = currentPowerPlantProduction }); } return(productionplans); }
public void ActivateProgressPanel(ProgressPanelMode mode) { switch (mode) { case ProgressPanelMode.Powerplant: UIWorkbuildingObserver uwb = WorkBuilding.workbuildingObserver; if (uwb == null || !uwb.gameObject.activeSelf) { DeactivateProgressPanel(); return; } else { Powerplant pp = uwb.observingWorkbuilding as Powerplant; Transform t = progressPanel.transform; RawImage ri = t.GetChild(0).GetComponent <RawImage>(); ri.texture = resourcesTexture; int resourceID = pp.GetFuelResourseID(); ri.uvRect = ResourceType.GetTextureRect(resourceID); ri.transform.GetChild(0).GetComponent <Text>().text = Localization.GetResourceName(resourceID); t = t.GetChild(1); RectTransform rt = t.GetChild(0).GetComponent <RectTransform>(); rt.offsetMax = new Vector2((Mathf.Clamp(pp.fuelLeft, 0, 1) - 1) * rt.rect.width, 0); t.GetChild(1).GetComponent <Text>().text = string.Format("{0:0.###}", pp.fuelLeft) + '%'; progressPanel.SetActive(true); progressPanelMode = mode; } break; } }
public ActionResult DeleteConfirmed(int id) { Powerplant powerplant = db.Powerplants.Find(id); db.Powerplants.Remove(powerplant); db.SaveChanges(); return(RedirectToAction("Index")); }
public ActionResult Edit([Bind(Include = "Id,No_RPC,Power,PowerAvgYear,Launch,PostalCode,Streetname,Streetnumber,GPS_X,GPS_Y,PowerTypeId,City")] Powerplant powerplant) { if (ModelState.IsValid) { db.Entry(powerplant).State = EntityState.Modified; db.SaveChanges(); return(RedirectToAction("Index")); } ViewBag.PowerTypeId = new SelectList(db.PowerTypes, "Id", "Name", powerplant.PowerTypeId); return(View(powerplant)); }
public Powerplant BuildPowerplant(Vector2 where) { //fill up a tile Vector2 imag = GetImagWorldCoordinates((int)where.x, (int)where.y); terraingrid[(int)imag.y, (int)imag.x] = Tile.Other; GameObject o = Instantiate(Powerplant.PowerplantPrefab) as GameObject; o.transform.position = new Vector3(where.x, where.y, o.transform.position.z); Powerplant p = o.GetComponent <Powerplant>(); return(p); }
// GET: Powerplants/Details/5 public ActionResult Details(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Powerplant powerplant = db.Powerplants.Find(id); if (powerplant == null) { return(HttpNotFound()); } return(View(powerplant)); }
// GET: Powerplants/Edit/5 public ActionResult Edit(int?id) { if (id == null) { return(new HttpStatusCodeResult(HttpStatusCode.BadRequest)); } Powerplant powerplant = db.Powerplants.Find(id); if (powerplant == null) { return(HttpNotFound()); } ViewBag.PowerTypeId = new SelectList(db.PowerTypes, "Id", "Name", powerplant.PowerTypeId); return(View(powerplant)); }
void Update() { updateTimer -= Time.deltaTime; if (updateTimer <= 0) { updateTimer = DATA_UPDATE_TIME; ColonyController colony = GameMaster.colonyController; if (showColonyInfo) { if (colony != null) { if (showingGearsCf != colony.gears_coefficient) { showingGearsCf = colony.gears_coefficient; gearsText.text = string.Format("{0:0.###}", showingGearsCf); } if (showingHappinessCf != colony.happiness_coefficient) { showingHappinessCf = colony.happiness_coefficient; happinessText.text = string.Format("{0:0.##}", showingHappinessCf * 100) + '%'; } if (showingBirthrate != colony.realBirthrate) { showingBirthrate = (int)(colony.realBirthrate * 100) / 100f;; birthrateText.text = showingBirthrate > 0 ? '+' + string.Format("{0:0.#####}", showingBirthrate) : string.Format("{0:0.#####}", showingBirthrate); } if (showingHospitalCf != colony.hospitals_coefficient) { showingHospitalCf = colony.hospitals_coefficient; hospitalText.text = string.Format("{0:0.##}", showingHospitalCf * 100) + '%'; } if (showingHealthCf != colony.health_coefficient) { showingHealthCf = colony.health_coefficient; healthText.text = string.Format("{0:0.##}", showingHealthCf * 100) + '%'; } } } else { if (showStorageInfo) { if (lastStorageOperationNumber != colony.storage.operationsDone) { RecalculateStoragePanel(); } } } if (progressPanel.activeSelf) { switch (progressPanelMode) { case ProgressPanelMode.Powerplant: UIWorkbuildingObserver uwb = WorkBuilding.workbuildingObserver; if (uwb == null || (!uwb.gameObject.activeSelf | uwb.observingWorkbuilding.id != Structure.MINERAL_POWERPLANT_2_ID)) { DeactivateProgressPanel(); return; } else { Powerplant pp = uwb.observingWorkbuilding as Powerplant; RawImage ri = progressPanel.transform.GetChild(0).GetComponent <RawImage>(); ri.texture = resourcesTexture; ri.uvRect = ResourceType.GetTextureRect(pp.GetFuelResourseID()); Transform t = progressPanel.transform.GetChild(1); RectTransform rt = t.GetChild(0).GetComponent <RectTransform>(); rt.offsetMax = new Vector2((pp.fuelLeft - 1) * rt.rect.width, 0); t.GetChild(1).GetComponent <Text>().text = string.Format("{0:0.###}", pp.fuelLeft * 100) + '%'; } break; } } else { if (hospitalPanel.activeSelf) { int nhm = Hospital.GetBirthrateModeIndex(); if (nhm != hospitalPanel_savedMode) { switch (nhm) { case 0: hospitalPanel.transform.GetChild(1).GetComponent <Toggle>().isOn = true; break; // normal case 1: hospitalPanel.transform.GetChild(2).GetComponent <Toggle>().isOn = true; break; // improved case 2: hospitalPanel.transform.GetChild(3).GetComponent <Toggle>().isOn = true; break; // lowered } hospitalPanel_savedMode = nhm; } } else { if (expeditionCorpusPanel.activeSelf) { int x = Shuttle.shuttlesList.Count; if (exCorpus_savedShuttlesCount != x) { exCorpus_savedShuttlesCount = x; expeditionCorpusPanel.transform.GetChild(0).GetComponent <Text>().text = Localization.GetPhrase(LocalizedPhrase.ShuttlesAvailable) + " : " + exCorpus_savedShuttlesCount.ToString(); } x = Crew.crewsList.Count; if (x != exCorpus_savedCrewsCount) { exCorpus_savedCrewsCount = x; expeditionCorpusPanel.transform.GetChild(1).GetComponent <Text>().text = Localization.GetPhrase(LocalizedPhrase.CrewsAvailable) + " : " + exCorpus_savedCrewsCount.ToString(); } x = QuantumTransmitter.transmittersList.Count; if (x != exCorpus_savedTransmittersCount) { exCorpus_savedTransmittersCount = x; expeditionCorpusPanel.transform.GetChild(2).GetComponent <Text>().text = Localization.GetPhrase(LocalizedPhrase.TransmittersAvailable) + " : " + exCorpus_savedTransmittersCount.ToString(); } } } } //up panel values: { bool valuesChanged = false; if (saved_freeWorkersCount != colony.freeWorkers) { saved_freeWorkersCount = colony.freeWorkers; valuesChanged = true; } if (saved_citizenCount != colony.citizenCount) { saved_citizenCount = colony.citizenCount; valuesChanged = true; } if (saved_livespaceCount != colony.totalLivespace) { saved_livespaceCount = colony.totalLivespace; valuesChanged = true; } if (valuesChanged) { citizenString.text = saved_freeWorkersCount.ToString() + " / " + saved_citizenCount.ToString() + " / " + saved_livespaceCount.ToString(); } valuesChanged = false; if (saved_energyCount != colony.energyStored) { saved_energyCount = (int)colony.energyStored; valuesChanged = true; } if (saved_energyMax != colony.totalEnergyCapacity) { saved_energyMax = (int)colony.totalEnergyCapacity; valuesChanged = true; } float es = (int)(colony.energySurplus * 10) / 10; if (saved_energySurplus != es) { saved_energySurplus = es; valuesChanged = true; } if (valuesChanged) { string surplus = es.ToString(); if (es > 0) { surplus = '+' + surplus; } energyString.text = saved_energyCount.ToString() + " / " + saved_energyMax.ToString() + " (" + surplus + ')'; } if (saved_energyCrystalsCount != (int)colony.energyCrystalsCount) { saved_energyCrystalsCount = (int)colony.energyCrystalsCount; energyCrystalsString.text = saved_energyCrystalsCount.ToString(); } } } if (activeAnnouncements) { Text t = announcementStrings[0]; Color c = t.color; c.a = Mathf.Lerp(c.a, 0, DISSAPPEAR_SPEED * Time.deltaTime * GameMaster.gameSpeed * (2 - c.a) * (2 - c.a)); if (c.a > 0.05f) { t.color = c; } else { if (announcementStrings[1].enabled) { int lastIndex = 1; t.color = Color.black; int i = 1; while (i < announcementStrings.Length) { if (!announcementStrings[i].enabled) { break; } else { lastIndex = i; } announcementStrings[i - 1].text = announcementStrings[i].text; i++; } announcementStrings[lastIndex].enabled = false; } else { t.enabled = false; activeAnnouncements = false; } } } if (moneyFlySpeed != 0) { Vector3 pos = moneyFlyingText.rectTransform.position; if (moneyFlySpeed > 0) { moneyFlySpeed -= Time.deltaTime / 5f; if (moneyFlySpeed < 0) { moneyFlySpeed = 0; moneyFlyingText.enabled = false; } else { moneyFlyingText.rectTransform.position = Vector3.Lerp(flyingMoneyOriginalPoint + 2 * Vector3.up, flyingMoneyOriginalPoint, moneyFlySpeed); moneyFlyingText.color = Color.Lerp(Color.green, new Color(0, 1, 0, 0), moneyFlySpeed); } } else { moneyFlySpeed += Time.deltaTime / 5f; if (moneyFlySpeed < 1) { moneyFlyingText.rectTransform.position = Vector3.Lerp(flyingMoneyOriginalPoint, flyingMoneyOriginalPoint + 2 * Vector3.up, moneyFlySpeed); moneyFlyingText.color = Color.Lerp(new Color(1, 0, 0, 0), Color.red, moneyFlySpeed); } else { moneyFlySpeed = 0; moneyFlyingText.enabled = false; } } } }
public void Prebuild(Buildable buildable) { if (current != null) { CancelCurrent(); } SetBuilding(buildable); //Attach object to mouse and create the effect of being built switch (buildable) { case Buildable.Powerstation_left: { current = CreateChargeSpotLeft(); AttachToMouse(current); AttachWeaver(current, Side.left); SetTemporaryConnectibles(current); AddConnectibleWeaversToStations(current); break; } case Buildable.Powerstation_right: { current = CreateChargeSpotRight(); AttachToMouse(current); AttachWeaver(current, Side.right); SetTemporaryConnectibles(current); AddConnectibleWeaversToStations(current); break; } case Buildable.Powerstation_up: { current = CreateChargeSpotUp(); AttachToMouse(current); AttachWeaver(current, Side.up); SetTemporaryConnectibles(current); AddConnectibleWeaversToStations(current); break; } case Buildable.Powerstation_down: { current = CreateChargeSpotDown(); AttachToMouse(current); AttachWeaver(current, Side.down); SetTemporaryConnectibles(current); AddConnectibleWeaversToStations(current); break; } case Buildable.Pole: { current = Pole.CreatePole().gameObject; AttachToMouse(current); current.GetComponent <FollowMouse>().discrete = false; current.AddComponent <PoleWeaver>(); //Set temporary connection SetTemporaryConnectibles(current); break; } case Buildable.Plant: { current = Powerplant.CreatePowerplant().gameObject; AttachToMouse(current); //reuse of RoadValidityChecker current.AddComponent <RoadValidityChecker>(); current.AddComponent <ConnectibleWeaver>(); SetTemporaryConnectibles(current); break; } } //Fold all houses FoldDecorations(); }
public void BuildCurrent() { GameObject building = null; Buildable temp = CurrentBuildable; switch (CurrentBuildable) { case Buildable.Powerstation_down: case Buildable.Powerstation_left: case Buildable.Powerstation_right: case Buildable.Powerstation_up: { //Check Validator bool valid = current.GetComponent <RoadValidityChecker>().IsValid(); World w = FindObjectOfType <World>(); Vector2 newPlacement = Vector2.zero; if (valid || PossibleToHelp(CurrentBuildable, current, out newPlacement)) { //build if (Game.Instance.SubtractResource(CurrentBuildable.GetCost())) { Road r = w.roadmap.BuildPowerstation(CurrentBuildable, current.transform.position.ToVector2(), w); building = r.gameObject; ResetState(); ConnectConnectibles(LevelManager.properties.PoleRadius, r.GetComponentsInChildren <Connectible>()); } else { Game.Instance.Warn(LocaleManager.locale.InsufficientResources); ResetState(); } } else { //do nothing Game.Instance.Warn(LocaleManager.locale.InvalidPlacement); } break; } case Buildable.Pole: { //check validity if (Game.Instance.SubtractResource(CurrentBuildable.GetCost())) { Pole p = Pole.BuildPole(current.transform.position.ToVector2()); //Destroy the dummy first, else it will try to connect it. building = p.gameObject; ResetState(); ConnectConnectibles(LevelManager.properties.PoleRadius, p.GetComponent <Connectible>()); } else { Game.Instance.Warn(LocaleManager.locale.InsufficientResources); ResetState(); } break; } case Buildable.Plant: { bool valid = current.GetComponent <RoadValidityChecker>().IsValid(); if (valid) { if (Game.Instance.SubtractResource(CurrentBuildable.GetCost())) { Powerplant p = FindObjectOfType <World>().BuildPowerplant(current.transform.position.ToVector2()); //Destroy the dummy first, else it will try to connect it. building = p.gameObject; ResetState(); ConnectConnectibles(LevelManager.properties.PoleRadius, p.GetComponent <Connectible>()); } else { Game.Instance.Warn(LocaleManager.locale.InsufficientResources); ResetState(); } } else { Game.Instance.Warn(LocaleManager.locale.InvalidPlacement); } break; } } //Add to action stack if successful if (building != null) { Deconstructible d = building.AddComponent <Deconstructible>(); d.building = temp; actionStack.Push(d); } UnfoldDecorations(); }
private double CalculateNonWindTurbineOutputPower(Powerplant powerplant) { return(powerplant.PMax * powerplant.Efficiency); }
private double CalculateWindTurbineOutputPower(double wind, Powerplant powerplant) { return(wind / 100 * powerplant.PMax); }