Пример #1
0
        /**
         * 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);
        }
Пример #2
0
    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));
 }
Пример #5
0
    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));
        }
Пример #8
0
    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;
                }
            }
        }
    }
Пример #9
0
    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();
    }
Пример #10
0
    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();
    }
Пример #11
0
 private double CalculateNonWindTurbineOutputPower(Powerplant powerplant)
 {
     return(powerplant.PMax * powerplant.Efficiency);
 }
Пример #12
0
 private double CalculateWindTurbineOutputPower(double wind, Powerplant powerplant)
 {
     return(wind / 100 * powerplant.PMax);
 }