diff options
Diffstat (limited to 'src/main/java')
2 files changed, 126 insertions, 104 deletions
diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java index 42f4e6c8ab..7da138e74c 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/multi/GT_MetaTileEntity_TM_teslaCoil.java @@ -1,6 +1,7 @@ package com.github.technus.tectech.thing.metaTileEntity.multi; import com.github.technus.tectech.CommonValues; +import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil; import com.github.technus.tectech.thing.cover.GT_Cover_TM_TeslaCoil_Ultimate; import com.github.technus.tectech.thing.metaTileEntity.IConstructable; import com.github.technus.tectech.thing.metaTileEntity.hatch.GT_MetaTileEntity_Hatch_Capacitor; @@ -342,9 +343,10 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock energyCapacity=aNBT.getLong("energyCapacity"); } + //TODO Rewrite efficiency formulas private long getEnergyEfficiency(long voltage, int mTier, boolean overDriveToggle){ if (overDriveToggle){ - return (long)(voltage * (2-energyEfficiencyMin + (energyEfficiencyMax - energyEfficiencyMin) / (maxTier - minTier + 1) * mTier)*(2- overdriveEfficiency)); //Sum overdrive efficiency formula + return (long)(voltage * (2-energyEfficiencyMin + (energyEfficiencyMax - energyEfficiencyMin) / (maxTier - minTier + 1) * mTier)*(2 - overdriveEfficiency)); //Sum overdrive efficiency formula } else { return (long)(voltage * energyEfficiencyMin + (energyEfficiencyMax - energyEfficiencyMin) / (maxTier - minTier + 1) * mTier); //Efficiency Formula } @@ -597,8 +599,9 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock continue; } IMetaTileEntity nodeInside = node.getMetaTileEntity(); - if (nodeInside instanceof GT_MetaTileEntity_TeslaCoil || nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && node.isActive() || (node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil_Ultimate)) { - eTeslaMap.put(node, (int) Math.ceil(Math.sqrt(xPosOffset * xPosOffset + yPosOffset * yPosOffset + zPosOffset * zPosOffset))); + if (nodeInside instanceof GT_MetaTileEntity_TeslaCoil || nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && node.isActive() || (node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil)) { + // eTeslaMap.put(node, (int) Math.ceil(Math.sqrt(xPosOffset * xPosOffset + yPosOffset * yPosOffset + zPosOffset * zPosOffset)));//TODO Test if range valid + eTeslaMap.put(node, (int) Math.ceil(Math.sqrt(Math.pow(xPosOffset,2) + Math.pow(yPosOffset,2) + Math.pow(zPosOffset,2)))); } } } @@ -651,11 +654,53 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock scanForTransmissionTargets((int) xPosScanMin, (int) yPosScan4, (int) zPosScanMin, (int) xPosScanMax, (int) yPosScan5, (int) zPosScanMax); break; default: - if (scanTime == (int) scanTimeMinSetting.get()-1) { + if (scanTime == (int) scanTimeMinSetting.get() - 1) { scanTime = -1; + + IGregTechTileEntity mte = getBaseMetaTileEntity(); + for (Map.Entry<IGregTechTileEntity, Integer> Rx : eTeslaMap.entrySet()) { + IGregTechTileEntity node = Rx.getKey(); + if (node != null) { + IMetaTileEntity nodeInside = node.getMetaTileEntity(); + try { + if (nodeInside instanceof GT_MetaTileEntity_TeslaCoil) { + GT_MetaTileEntity_TeslaCoil teslaCoil = (GT_MetaTileEntity_TeslaCoil) nodeInside; + + float tX = node.getXCoord(); + float tY = node.getYCoord(); + float tZ = node.getZCoord(); + + float tXN = mte.getXCoord(); + float tYN = mte.getYCoord(); + float tZN = mte.getZCoord(); + + int tOffset = (int) Math.ceil(Math.sqrt(Math.pow(tX-tXN,2) + Math.pow(tY-tYN,2) + Math.pow(tZ-tZN,2))); + teslaCoil.eTeslaMap.put(mte,tOffset); + + for (Map.Entry<IGregTechTileEntity, Integer> RRx : eTeslaMap.entrySet()) { + IGregTechTileEntity nodeN = RRx.getKey(); + if (nodeN == node){ + continue; + } + tXN = nodeN.getXCoord(); + tYN = nodeN.getYCoord(); + tZN = nodeN.getZCoord(); + tOffset = (int) Math.ceil(Math.sqrt(Math.pow(tX-tXN,2) + Math.pow(tY-tYN,2) + Math.pow(tZ-tZN,2))); + if (tOffset > 20){ + continue; + } + teslaCoil.eTeslaMap.put(nodeN,tOffset); + } + } + } catch (Exception e) { + eTeslaMap.remove(Rx.getKey()); + } + } + } } break; } + scanTime++; scanTimeDisplay.set(scanTime); @@ -701,7 +746,7 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock if (teslaCoil.getStoredEnergy()[1] > 0) { continue; } - } else if ((node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil_Ultimate) && node.getEUCapacity() > 0) { + } else if ((node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil) && node.getEUCapacity() > 0) { continue; } } catch (Exception e) { diff --git a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java index ca50cca4e5..fb751c8fab 100644 --- a/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/metaTileEntity/single/GT_MetaTileEntity_TeslaCoil.java @@ -21,22 +21,21 @@ import static java.lang.Math.round; public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryBuffer {
- private int maxTier = 4; //Max tier of transceiver
- private int minTier = 1; //Min tier of transceiver
+ private int maxTier = 3; //Max tier of transceiver
+ private int minTier = 0; //Min tier of transceiver
- //private Map<IGregTechTileEntity, Integer> eTeslaMap = new HashMap<IGregTechTileEntity, Integer>();//Tesla Map to map them tesla bois!
- public Map<IGregTechTileEntity, Integer> eTeslaMap = new HashMap<IGregTechTileEntity, Integer>();//Tesla Map to map them tesla bois!
- //private int scanTime = 0; //Sets scan time to Z E R O :epic:
- //private int scanTimeMin = 100; //Min scan time in ticks
- //private int scanTimeTill = scanTimeMin; //Set default scan time
+ public Map<IGregTechTileEntity, Integer> eTeslaMap = new HashMap();//Tesla Map to map them tesla bois!
+
+ //TODO Rewrite range limits, use new formula
private int transferRadiusMax = 20; //Tesla scan radius
private int transferRadiusMin = 4; //Tesla scan radius
- private int transferRadiusLimitTop = transferRadiusMin + (transferRadiusMax - transferRadiusMin) / (maxTier - minTier + 1) * (mTier - 1); //Tesla scan radius Formula
+ private int transferRadiusLimitTop = transferRadiusMin + (transferRadiusMax - transferRadiusMin) / (maxTier - minTier + 1) * mTier; //Tesla scan radius Formula
private int transferRadiusLimitBottom = 1; //Minimum user configurable
private int transferRadius = transferRadiusLimitTop; //Default transferRadius setting
private int transferRadiusTower = 0; //Radius for transceiver to tower transfers
private int transferRadiusCover = 0; //Radius for transceiver to cover transfers
+ //TODO Rewrite histSetting to improve readability
public boolean powerPassToggle = false; //Power Pass for public viewing
private int histSteps = 20; //Hysteresis Resolution
private int histSettingLow = 3; //Hysteresis Low Limit
@@ -46,13 +45,15 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB private float histLow = (float) histSettingLow / histSteps; //Power pass is disabled if power is under this fraction
private float histHigh = (float) histSettingHigh / histSteps; //Power pass is enabled if power is over this fraction
+ //TODO Rewrite efficiency formulas
private long lossPerBlock = 2; //EU lost per block traveled
private float energyEfficiencyMax = 0.95F; //Max efficiency
private float energyEfficiencyMin = 0.75F; //Min efficiency
private float overdriveEfficiency = 0.95F; //Overdrive efficiency
- private float energyEfficiency = energyEfficiencyMin + (energyEfficiencyMax - energyEfficiencyMin) / (maxTier - minTier + 1) * (mTier - 1); //Efficiency Formula
- private float sumOverdriveEfficiency = (2-energyEfficiency)*(2- overdriveEfficiency); //Sum overdrive efficiency formula
+ private float energyEfficiency = energyEfficiencyMin + (energyEfficiencyMax - energyEfficiencyMin) / (maxTier - minTier + 1) * mTier; //Efficiency Formula
+ private float sumOverdriveEfficiency = (2 - energyEfficiency) * (2 - overdriveEfficiency); //Sum overdrive efficiency formula
+ //TODO Rewrite over drive efficiency formulas
public boolean overDriveToggle = false; //Overdrive toggle
private long outputVoltage = V[mTier]; //Tesla Voltage Output
private long outputVoltagePostEfficiency = (long) (outputVoltage * energyEfficiency); //Max power a machine can actually receive
@@ -156,115 +157,91 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB @Override
public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
super.onPostTick(aBaseMetaTileEntity, aTick);
- if (aBaseMetaTileEntity.isServerSide() && !eTeslaMap.isEmpty()) {
-
- ////Hysteresis based ePowerPass Config
- long energyMax = getStoredEnergy()[1];
- long energyStored = getStoredEnergy()[0];
- float energyFrac = (float) energyStored / energyMax;
-
- //ePowerPass hist toggle
- if (!powerPassToggle && energyFrac > histHigh) {
- powerPassToggle = true;
- } else if (powerPassToggle && energyFrac < histLow) {
- powerPassToggle = false;
- }
+ if (aBaseMetaTileEntity.isClientSide() || eTeslaMap.isEmpty()) {
+ return;
+ }
- //Scanning for active teslas
- //scanTime++;
- //if (scanTime >= scanTimeTill) {
- // scanTime = 0;
- // eTeslaMap.clear();
- //
- // for (int xPosOffset = -transferRadius; xPosOffset <= transferRadius; xPosOffset++) {
- // for (int yPosOffset = -transferRadius; yPosOffset <= transferRadius; yPosOffset++) {
- // for (int zPosOffset = -transferRadius; zPosOffset <= transferRadius; zPosOffset++) {
- // if (xPosOffset == 0 && yPosOffset == 0 && zPosOffset == 0) {
- // continue;
- // }
- // IGregTechTileEntity node = aBaseMetaTileEntity.getIGregTechTileEntityOffset(xPosOffset, yPosOffset, zPosOffset);
- // if (node == null) {
- // continue;
- // }
- // IMetaTileEntity nodeInside = node.getMetaTileEntity();
- // if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && node.isActive() || (node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil)) {
- // eTeslaMap.put(node, (int) Math.ceil(Math.sqrt(xPosOffset * xPosOffset + yPosOffset * yPosOffset + zPosOffset * zPosOffset)));
- // }
- // }
- // }
- // }
- //}
+ //Hysteresis based ePowerPass Config
+ long energyMax = getStoredEnergy()[1];
+ long energyStored = getStoredEnergy()[0];
+ float energyFrac = (float) energyStored / energyMax;
- //Stuff to do if ePowerPass
- if (powerPassToggle) {
- float rangeFrac = (float)((-0.5*Math.pow(energyFrac,2))+(1.5*energyFrac));
- outputCurrent = mBatteryCount;
- transferRadiusTower = (int) (transferRadius * rangeFrac);
- transferRadiusCover = (int) (transferRadiusTower / 1.25);
+ //ePowerPass hist toggle
+ if (!powerPassToggle && energyFrac > histHigh) {
+ powerPassToggle = true;
+ } else if (powerPassToggle && energyFrac < histLow) {
+ powerPassToggle = false;
+ }
- //Clean the eTeslaMap
- for (Map.Entry<IGregTechTileEntity, Integer> Rx : eTeslaMap.entrySet()) {
- IGregTechTileEntity node = Rx.getKey();
- if (node != null) {
- IMetaTileEntity nodeInside = node.getMetaTileEntity();
- try {
- if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && node.isActive()) {
- GT_MetaTileEntity_TM_teslaCoil teslaTower = (GT_MetaTileEntity_TM_teslaCoil) nodeInside;
- if (teslaTower.maxEUStore() > 0) {
- continue;
- }
- } else if ((node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil) && node.getEUCapacity() > 0) {
+ //Stuff to do if ePowerPass
+ if (powerPassToggle) {
+ float rangeFrac = (float) ((-0.5 * Math.pow(energyFrac, 2)) + (1.5 * energyFrac));
+ outputCurrent = mBatteryCount;
+ transferRadiusTower = (int) (transferRadius * rangeFrac);
+ transferRadiusCover = (int) (transferRadiusTower / 1.25);
+
+ //Clean the eTeslaMap
+ for (Map.Entry<IGregTechTileEntity, Integer> Rx : eTeslaMap.entrySet()) {
+ IGregTechTileEntity node = Rx.getKey();
+ if (node != null) {
+ IMetaTileEntity nodeInside = node.getMetaTileEntity();
+ try {
+ if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && node.isActive()) {
+ GT_MetaTileEntity_TM_teslaCoil teslaTower = (GT_MetaTileEntity_TM_teslaCoil) nodeInside;
+ if (teslaTower.maxEUStore() > 0) {
continue;
}
- } catch (Exception e) {
+ } else if ((node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil) && node.getEUCapacity() > 0) {
+ continue;
}
+ } catch (Exception e) {
}
- eTeslaMap.remove(Rx.getKey());
}
+ eTeslaMap.remove(Rx.getKey());
+ }
- //Power transfer
- while (outputCurrent > 0) {
- boolean idle = true;
- for (Map.Entry<IGregTechTileEntity, Integer> Rx : entriesSortedByValues(eTeslaMap)) {
- if (getEUVar() >= (overDriveToggle ? outputVoltage*2 : outputVoltage)) {
- IGregTechTileEntity node = Rx.getKey();
- IMetaTileEntity nodeInside = node.getMetaTileEntity();
- if (overDriveToggle){
- outputVoltageInjectable = outputVoltage;
- outputVoltageConsumption = outputVoltagePostOverdrive + (lossPerBlock * Rx.getValue());
- } else {
- outputVoltageInjectable = outputVoltagePostEfficiency - (lossPerBlock * Rx.getValue());
- outputVoltageConsumption = outputVoltage;
- }
- if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && Rx.getValue() <= transferRadiusTower) {
- GT_MetaTileEntity_TM_teslaCoil nodeTesla = (GT_MetaTileEntity_TM_teslaCoil) nodeInside;
- if (!nodeTesla.ePowerPass) {
- if (nodeTesla.getEUVar() + outputVoltageInjectable <= (nodeTesla.maxEUStore() / 2)) {
- setEUVar(getEUVar() - outputVoltageConsumption);
- node.increaseStoredEnergyUnits(outputVoltageInjectable, true);
- outputCurrent--;
- idle = false;
- }
- }
- } else if ((node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil) && !(node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil_Ultimate) && Rx.getValue() <= transferRadiusCover) {
- if (node.injectEnergyUnits((byte) 1, outputVoltageInjectable, 1L) > 0L) {
+ //Power transfer
+ while (outputCurrent > 0) {
+ boolean idle = true;
+ for (Map.Entry<IGregTechTileEntity, Integer> Rx : entriesSortedByValues(eTeslaMap)) {
+ if (getEUVar() >= (overDriveToggle ? outputVoltage * 2 : outputVoltage)) {
+ IGregTechTileEntity node = Rx.getKey();
+ IMetaTileEntity nodeInside = node.getMetaTileEntity();
+ if (overDriveToggle) {
+ outputVoltageInjectable = outputVoltage;
+ outputVoltageConsumption = outputVoltagePostOverdrive + (lossPerBlock * Rx.getValue());
+ } else {
+ outputVoltageInjectable = outputVoltagePostEfficiency - (lossPerBlock * Rx.getValue());
+ outputVoltageConsumption = outputVoltage;
+ }
+ if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && Rx.getValue() <= transferRadiusTower) {
+ GT_MetaTileEntity_TM_teslaCoil nodeTesla = (GT_MetaTileEntity_TM_teslaCoil) nodeInside;
+ if (!nodeTesla.ePowerPass) {
+ if (nodeTesla.getEUVar() + outputVoltageInjectable <= (nodeTesla.maxEUStore() / 2)) {
setEUVar(getEUVar() - outputVoltageConsumption);
+ node.increaseStoredEnergyUnits(outputVoltageInjectable, true);
outputCurrent--;
idle = false;
}
}
- if (outputCurrent == 0) {
- break;
+ } else if ((node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil) && !(node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil_Ultimate) && Rx.getValue() <= transferRadiusCover) {
+ if (node.injectEnergyUnits((byte) 1, outputVoltageInjectable, 1L) > 0L) {
+ setEUVar(getEUVar() - outputVoltageConsumption);
+ outputCurrent--;
+ idle = false;
}
- } else {
- idle = true;
+ }
+ if (outputCurrent == 0) {
break;
}
- }
- if (idle) {
+ } else {
+ idle = true;
break;
}
}
+ if (idle) {
+ break;
+ }
}
}
}
|