From 9703e623f99ca44ef552623e5057a557d4f57a12 Mon Sep 17 00:00:00 2001 From: Bass Date: Sat, 16 Feb 2019 15:45:33 +0000 Subject: 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. --- .../tectech/thing/cover/GT_Cover_TM_TeslaCoil.java | 1 - .../multi/GT_MetaTileEntity_TM_teslaCoil.java | 4 +- .../single/GT_MetaTileEntity_TeslaCoil.java | 110 +++++++++++++++------ 3 files changed, 80 insertions(+), 35 deletions(-) (limited to 'src/main/java') 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 eTeslaMap = new HashMap();//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 eTeslaMap = new HashMap();//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 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 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!"; + } } -- cgit