12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 |
- package algo;
- import java.util.ArrayList;
- import java.util.EmptyStackException;
- public class StorageProductionController {
- private ArrayList<StorageElement> storages;
- public StorageProductionController(ArrayList<StorageElement> storages) {
- this.storages = storages;
- }
- public float currentPossibleStorageProduction() {
- float possibleEnergy = 0;
- for (StorageElement so : storages) {
- possibleEnergy += so.getPossibleProduction();
- }
- return possibleEnergy;
- }
- public float currentStorageProduction() {
- float producedEnergy = 0;
- for (StorageElement ele : storages) {
- if (ele.getStatus().equals(StorageElement.Mode.EMIT)) {
- // needed to no emit more than what is available
- if(ele.getStateOfCharge() - ele.getEnergyPerElement() < 0){
- ele.setEnergyPerElement(ele.getStateOfCharge());
- }
- producedEnergy += ele.getEnergyPerElement();
- }
- }
- return producedEnergy;
- }
- public void enableStorageProduction(final float energyNeeded) {
- System.out.println("energy needed from storage" + energyNeeded);
- float energyLeftToEnabled = energyNeeded;
- // if(currentStorageProduction() < energyNeeded){//TODO: das if muss ich nochmal ueberdenken
- // energyLeftToEnabled = energyNeeded - currentStorageProduction();
- //DONE?: Problem: es wird abgezogen weil ja schon emitter aber wir wolle das ja erhoehen...
- for (StorageElement se: storages) {
- // if (se.getStatus().equals(StorageElement.Mode.STANDBY)
- // || se.getStatus().equals(StorageElement.Mode.COLLECT)
- // || (se.getStatus().equals(StorageElement.Mode.EMIT)
- // && se.getEnergyPerElement() < se.getMaxOutRatio()
- // && se.getEnergyPerElement() < se.getStateOfCharge())) {
- // TODO: eventuell nach entfernung sortieren
- if(!se.storageChargeDepleted()){
- energyLeftToEnabled = energyLeftToEnabled - se.setStatusAndSetEnergy(StorageElement.Mode.EMIT, energyLeftToEnabled);
- }
- // }
- if(energyLeftToEnabled <= 0){
- System.out.println("enabled energy from storage");
- return;
- }
- }
- // }else{
- // disableStorageProduction(energyNeeded - currentStorageProduction());
- // }
- }
- public void disableStorageProduction(float energyNotNeeded) {
- if(energyNotNeeded == -1) {
- for (StorageElement se : storages) {
- se.setStatusAndSetEnergy(StorageElement.Mode.STANDBY, 0);
- }
- }
- // float disabledEnergy = 0;
- //
- // //TODO: disable furthest first?
- // for (StorageElement se : storages) {
- // if (se.getStatus().equals(StorageElement.Mode.EMIT)) {
- // if(se.getEnergyPerElement() > energyNotNeeded){
- // disabledEnergy = disabledEnergy + energyNotNeeded;
- // se.setStatusAndSetEnergy(StorageElement.Mode.EMIT, se.getEnergyPerElement() - energyNotNeeded);
- // }else{
- // disabledEnergy = disabledEnergy + se.getEnergyPerElement();
- // se.setStatusAndSetEnergy(StorageElement.Mode.STANDBY, 0);
- // }
- // }
- // if (disabledEnergy >= energyNotNeeded) {
- // return;
- // }
- // }
- }
- }
|