diff options
author | Bass <tudurap.com@gmail.com> | 2019-02-16 15:45:33 +0000 |
---|---|---|
committer | Bass <tudurap.com@gmail.com> | 2019-02-16 15:45:33 +0000 |
commit | 9703e623f99ca44ef552623e5057a557d4f57a12 (patch) | |
tree | 50e874809fcd0af189907a13c6fff45129bb2414 /src | |
parent | 5706ba13565c496c119e6ce07913da3f1e809ff3 (diff) | |
download | GT5-Unofficial-9703e623f99ca44ef552623e5057a557d4f57a12.tar.gz GT5-Unofficial-9703e623f99ca44ef552623e5057a557d4f57a12.tar.bz2 GT5-Unofficial-9703e623f99ca44ef552623e5057a557d4f57a12.zip |
Tesla nonsense (more of)
Transceivers can now output multiple amps worth of current, they now also have different stages of efficiency and calculate some losses.
Diffstat (limited to 'src')
3 files changed, 80 insertions, 35 deletions
diff --git a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java index 6d7383fe49..721f730960 100644 --- a/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java +++ b/src/main/java/com/github/technus/tectech/thing/cover/GT_Cover_TM_TeslaCoil.java @@ -3,7 +3,6 @@ package com.github.technus.tectech.thing.cover; import gregtech.api.interfaces.tileentity.ICoverable; import gregtech.api.util.GT_CoverBehavior; import gregtech.api.util.GT_Utility; -import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import static ic2.api.info.Info.DMG_ELECTRIC; 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 7dc040b28a..335cfc612a 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 @@ -57,8 +57,8 @@ public class GT_MetaTileEntity_TM_teslaCoil extends GT_MetaTileEntity_Multiblock private int transferRadiusTransceiver = 16; //Radius for tower to transceiver transfers private int transferRadiusCoverUltimate = 16; //Radius for tower to ultimate cover transfers - private long outputVoltage = 512; //Tesla Voltage Output - private long outputCurrent = 1; //Tesla Current Output + private long outputVoltage = 0; //Tesla Voltage Output + private long outputCurrent = 0; //Tesla Current Output public boolean powerPassToggle = false; //Power Pass for public viewing 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 dd99c0fd75..3bf1642d82 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 @@ -15,36 +15,40 @@ import net.minecraft.item.ItemStack; import java.util.*;
+import static com.github.technus.tectech.CommonValues.V;
import static com.github.technus.tectech.Util.entriesSortedByValues;
import static java.lang.Math.round;
public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryBuffer {
- public boolean powerPassToggle = false; //Power Pass for public viewing
-
+ private 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
+ private int scanRadius = 32; //Tesla scan radius
+ private int transferRadiusTower = 32; //Radius for transceiver to tower transfers
+ private int transferRadiusCover = 16; //Radius for transceiver to cover transfers
- private Map<IGregTechTileEntity, Integer> eTeslaMap = new HashMap<IGregTechTileEntity, Integer>();//Tesla Map to map them tesla bois!
-
+ public boolean powerPassToggle = false; //Power Pass for public viewing
private int histSteps = 20; //Hysteresis Resolution
private int histSettingLow = 3;
private int histSettingHigh = 15;
private int histLowLimit = 1; //How low can you configure it?
private int histHighLimit = histSteps - 1; //How high can you configure it?
-
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
- private int scanRadius = 32; //Tesla scan radius
-
- private int transferRadiusTower = 32; //Radius for transceiver to tower transfers
- private int transferRadiusCover = 16; //Radius for transceiver to cover transfers
-
- private long outputVoltage = 512; //Tesla Voltage Output
- private long outputCurrent = 1; //Tesla Current Output
+ private long lossPerBlock = 2; //EU lost per block traveled
+ private float energyEfficiencyMax = 1F; //Max efficiency
+ private float energyEfficiencyMin = 0.8F; //Min efficiency
+ private int maixTier = 4; //Max tier of transceiver
+ private int minTier = 1; //Min tier of transceiver
+ private float energyEfficiency = energyEfficiencyMin + ((energyEfficiencyMax - energyEfficiencyMin) / (maixTier - minTier + 1)); //Efficiency Formula
+ private long outputVoltage = V[mTier]; //Tesla Voltage Output
+ private long outputVoltagePostEfficency = (long) (outputVoltage * energyEfficiency); //Max power a machine can actually receive
+ private long outputVoltageInjectable = 0;
+ private long outputCurrent = 0; //Tesla Current Output
public GT_MetaTileEntity_TeslaCoil(int aID, String aName, String aNameRegional, int aTier, int aSlotCount) {
super(aID, aName, aNameRegional, aTier, "Tesla Coil Transceiver", aSlotCount);
@@ -55,6 +59,10 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB super(aName, aTier, aDescription, aTextures, aSlotCount);
}
+ public void onFirstTick(IGregTechTileEntity aBaseMetaTileEntity) {
+ energyEfficiency = energyEfficiencyMin + ((energyEfficiencyMax - energyEfficiencyMin) / (maixTier - minTier + 1));
+ }
+
public void onScrewdriverRightClick(byte aSide, EntityPlayer aPlayer, float aX, float aY, float aZ) {
if (aPlayer.isSneaking()) {
if (histSettingHigh < histHighLimit) {
@@ -84,13 +92,15 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB public void onPostTick(IGregTechTileEntity aBaseMetaTileEntity, long aTick) {
if (aBaseMetaTileEntity.isServerSide()) {
IGregTechTileEntity mte = getBaseMetaTileEntity();
+
+ //region BasicBatteryBuffer
this.mCharge = aBaseMetaTileEntity.getStoredEU() / 2L > aBaseMetaTileEntity.getEUCapacity() / 3L;
this.mDecharge = aBaseMetaTileEntity.getStoredEU() < aBaseMetaTileEntity.getEUCapacity() / 3L;
this.mBatteryCount = 0;
this.mChargeableCount = 0;
ItemStack[] var4 = this.mInventory;
- int var5 = var4.length;
+ int var5 = var4.length;
for (int var6 = 0; var6 < var5; ++var6) {
ItemStack tStack = var4[var6];
if (GT_ModHandler.isElectricItem(tStack, this.mTier)) {
@@ -100,11 +110,11 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB ++this.mChargeableCount;
}
}
+ //endregion
////Hysteresis based ePowerPass Config
long energyMax = getStoredEnergy()[1];
long energyStored = getStoredEnergy()[0];
-
float energyFrac = (float) energyStored / energyMax;
//ePowerPass hist toggle
@@ -141,9 +151,7 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB //Stuff to do if ePowerPass
if (powerPassToggle) {
- outputVoltage = 512;//TODO Set Depending On Tier
- outputCurrent = 1;//TODO Generate depending on count of batteries
-
+ outputCurrent = mBatteryCount;
transferRadiusTower = 32; //TODO generate based on power stored
transferRadiusCover = 16; //TODO generate based on power stored
@@ -164,30 +172,68 @@ public class GT_MetaTileEntity_TeslaCoil extends GT_MetaTileEntity_BasicBatteryB } catch (Exception e) {
}
}
- System.out.println("Something just got purged!");
eTeslaMap.remove(Rx.getKey());
}
//Power transfer
- for (Map.Entry<IGregTechTileEntity, Integer> Rx : entriesSortedByValues(eTeslaMap)) {
- IGregTechTileEntity node = Rx.getKey();
- IMetaTileEntity nodeInside = node.getMetaTileEntity();
- long euTran = outputVoltage;
- if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && Rx.getValue() <= transferRadiusTower) {
- GT_MetaTileEntity_TM_teslaCoil nodeTesla = (GT_MetaTileEntity_TM_teslaCoil) nodeInside;
- if (!nodeTesla.powerPassToggle) {
- if (nodeTesla.getEUVar() + euTran <= (nodeTesla.maxEUStore() / 2)) {
- setEUVar(getEUVar() - euTran);
- node.increaseStoredEnergyUnits(euTran, true);
+ while (outputCurrent > 0) {
+ boolean idle = true;
+ for (Map.Entry<IGregTechTileEntity, Integer> Rx : entriesSortedByValues(eTeslaMap)) {
+ if (getEUVar() >= outputVoltage) {
+ IGregTechTileEntity node = Rx.getKey();
+ IMetaTileEntity nodeInside = node.getMetaTileEntity();
+ outputVoltageInjectable = outputVoltagePostEfficency - (lossPerBlock * Rx.getValue());
+ if (nodeInside instanceof GT_MetaTileEntity_TM_teslaCoil && Rx.getValue() <= transferRadiusTower) {
+ GT_MetaTileEntity_TM_teslaCoil nodeTesla = (GT_MetaTileEntity_TM_teslaCoil) nodeInside;
+ if (!nodeTesla.powerPassToggle) {
+ if (nodeTesla.getEUVar() + outputVoltage <= (nodeTesla.maxEUStore() / 2)) {
+ setEUVar(getEUVar() - outputVoltage);
+ node.increaseStoredEnergyUnits(outputVoltageInjectable, true);
+ outputCurrent--;
+ idle = false;
+ }
+ }
+ } else if ((node.getCoverBehaviorAtSide((byte) 1) instanceof GT_Cover_TM_TeslaCoil) && Rx.getValue() <= transferRadiusCover) {
+ if (node.injectEnergyUnits((byte) 1, outputVoltageInjectable, 1L) > 0L) {
+ setEUVar(getEUVar() - outputVoltage);
+ outputCurrent--;
+ idle = false;
+ }
+ }
+ if (outputCurrent == 0) {
+ break;
}
}
- } else if ((node.getCoverBehaviorAtSide((byte)1) instanceof GT_Cover_TM_TeslaCoil) && Rx.getValue() <= transferRadiusCover){
- if (node.injectEnergyUnits((byte)1, euTran, 1L) > 0L) {
- setEUVar(getEUVar() - euTran);
- }
+ }
+ if (idle) {
+ break;
}
}
}
}
}
+
+ // Cheeky skrub stuff to get machine to switch powerPass on soft mallet
+ public boolean hasAlternativeModeText() {
+ return true;
+ }
+
+ public String getAlternativeModeText() {
+ ////Hysteresis based ePowerPass Config
+ long energyMax = getStoredEnergy()[1];
+ long energyStored = getStoredEnergy()[0];
+ float energyFrac = (float) energyStored / energyMax;
+
+ //ePowerPass hist toggle
+ if (energyFrac > histHigh) {
+ powerPassToggle = true;
+ } else if (energyFrac < histLow) {
+ powerPassToggle = false;
+ } else {
+ powerPassToggle = !powerPassToggle;
+ }
+
+ //And after this cheeky-ness, toss the string XD
+ return powerPassToggle ? "Sending Power!" : "Receiving Power!";
+ }
}
|