From 8a4aaff44a113168645206cf152060f5fb25e9b0 Mon Sep 17 00:00:00 2001 From: Ben Spiers Date: Mon, 22 Dec 2014 19:38:03 +0000 Subject: [PATCH] Move standard simulation method into a Utils class. --- src/main/java/mekanism/api/IHeatTransfer.java | 2 + .../common/multipart/PartHeatTransmitter.java | 41 ++++++++----------- .../java/mekanism/common/util/HeatUtils.java | 30 ++++++++++++++ .../common/tile/TileEntityHeatGenerator.java | 38 ++++++++--------- 4 files changed, 64 insertions(+), 47 deletions(-) diff --git a/src/main/java/mekanism/api/IHeatTransfer.java b/src/main/java/mekanism/api/IHeatTransfer.java index 04803d4a6..da682e116 100644 --- a/src/main/java/mekanism/api/IHeatTransfer.java +++ b/src/main/java/mekanism/api/IHeatTransfer.java @@ -23,4 +23,6 @@ public interface IHeatTransfer public double applyTemperatureChange(); public boolean canConnectHeat(ForgeDirection side); + + public IHeatTransfer getAdjacent(ForgeDirection side); } diff --git a/src/main/java/mekanism/common/multipart/PartHeatTransmitter.java b/src/main/java/mekanism/common/multipart/PartHeatTransmitter.java index 8a5e61c0c..67cac04e4 100644 --- a/src/main/java/mekanism/common/multipart/PartHeatTransmitter.java +++ b/src/main/java/mekanism/common/multipart/PartHeatTransmitter.java @@ -8,6 +8,7 @@ import mekanism.api.transmitters.IGridTransmitter; import mekanism.api.transmitters.TransmissionType; import mekanism.client.render.RenderPartTransmitter; import mekanism.common.HeatNetwork; +import mekanism.common.util.HeatUtils; import net.minecraft.client.renderer.texture.IIconRegister; import net.minecraft.entity.player.EntityPlayer; @@ -109,31 +110,7 @@ public class PartHeatTransmitter extends PartTransmitter implements @Override public double[] simulateHeat() { - double heatTransferred[] = new double[]{0,0}; - Coord4D pos = Coord4D.get(tile()); - for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) - { - if(connectionMapContainsSide(getAllCurrentConnections(), side)) - { - TileEntity tileEntity = pos.getFromSide(side).getTileEntity(world()); - if(tileEntity instanceof IHeatTransfer) - { - IHeatTransfer sink = (IHeatTransfer)tileEntity; - double invConduction = sink.getInverseConductionCoefficient() + getInverseConductionCoefficient(); - double heatToTransfer = getTemp() / invConduction; - transferHeatTo(-heatToTransfer); - sink.transferHeatTo(heatToTransfer); - if(!(sink instanceof IGridTransmitter)) - heatTransferred[0] += heatToTransfer; - continue; - } - } - //Transfer to air otherwise - double heatToTransfer = getTemp() / (IHeatTransfer.AIR_INVERSE_COEFFICIENT+getInsulationCoefficient(side)+getInverseConductionCoefficient()); - transferHeatTo(-heatToTransfer); - heatTransferred[1] += heatToTransfer; - } - return heatTransferred; + return HeatUtils.simulate(this, Coord4D.get(tile()), world()); } @Override @@ -155,6 +132,20 @@ public class PartHeatTransmitter extends PartTransmitter implements return true; } + @Override + public IHeatTransfer getAdjacent(ForgeDirection side) + { + if(connectionMapContainsSide(getAllCurrentConnections(), side)) + { + TileEntity adj = Coord4D.get(tile()).getFromSide(side).getTileEntity(world()); + if(adj instanceof IHeatTransfer) + { + return (IHeatTransfer)adj; + } + } + return null; + } + public static void registerIcons(IIconRegister register) { heatIcons.registerCenterIcons(register, new String[] {"HeatTransmitter"}); diff --git a/src/main/java/mekanism/common/util/HeatUtils.java b/src/main/java/mekanism/common/util/HeatUtils.java index a0e1ecaa8..486af0bf3 100644 --- a/src/main/java/mekanism/common/util/HeatUtils.java +++ b/src/main/java/mekanism/common/util/HeatUtils.java @@ -1,5 +1,35 @@ package mekanism.common.util; +import mekanism.api.Coord4D; +import mekanism.api.IHeatTransfer; +import mekanism.api.transmitters.IGridTransmitter; + +import net.minecraft.world.World; +import net.minecraftforge.common.util.ForgeDirection; + public class HeatUtils { + public static double[] simulate(IHeatTransfer source, Coord4D pos, World world) + { + double heatTransferred[] = new double[]{0,0}; + for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) + { + IHeatTransfer sink = source.getAdjacent(side); + if(sink != null) + { + double invConduction = sink.getInverseConductionCoefficient() + source.getInverseConductionCoefficient(); + double heatToTransfer = source.getTemp() / invConduction; + source.transferHeatTo(-heatToTransfer); + sink.transferHeatTo(heatToTransfer); + if(!(sink instanceof IGridTransmitter)) + heatTransferred[0] += heatToTransfer; + continue; + } + //Transfer to air otherwise + double heatToTransfer = source.getTemp() / (IHeatTransfer.AIR_INVERSE_COEFFICIENT+source.getInsulationCoefficient(side)+source.getInverseConductionCoefficient()); + source.transferHeatTo(-heatToTransfer); + heatTransferred[1] += heatToTransfer; + } + return heatTransferred; + } } diff --git a/src/main/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java b/src/main/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java index 8ee1628e5..6de02503b 100644 --- a/src/main/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java +++ b/src/main/java/mekanism/generators/common/tile/TileEntityHeatGenerator.java @@ -10,6 +10,7 @@ import mekanism.common.Mekanism; import mekanism.common.base.ISustainedData; import mekanism.common.util.ChargeUtils; import mekanism.common.util.FluidContainerUtils; +import mekanism.common.util.HeatUtils; import mekanism.common.util.MekanismUtils; import mekanism.common.util.PipeUtils; @@ -404,31 +405,10 @@ public class TileEntityHeatGenerator extends TileEntityGenerator implements IFlu @Override public double[] simulateHeat() { - double heatTransferred[] = new double[]{0,0}; - Coord4D pos = Coord4D.get(this); - for(ForgeDirection side : ForgeDirection.VALID_DIRECTIONS) - { - TileEntity tileEntity = pos.getFromSide(side).getTileEntity(getWorldObj()); - if(canConnectHeat(side) && tileEntity instanceof IHeatTransfer) - { - IHeatTransfer sink = (IHeatTransfer)tileEntity; - double invConduction = sink.getInverseConductionCoefficient() + getInverseConductionCoefficient(); - double heatToTransfer = getTemp() / invConduction; - transferHeatTo(-heatToTransfer); - sink.transferHeatTo(heatToTransfer); - if(!(sink instanceof IGridTransmitter)) - heatTransferred[0] += heatToTransfer; - continue; - } - //Transfer to air otherwise - double heatToTransfer = getTemp() / (IHeatTransfer.AIR_INVERSE_COEFFICIENT+getInverseConductionCoefficient()); - transferHeatTo(-heatToTransfer); - heatTransferred[1] += heatToTransfer; - } double workDone = getTemp()*thermalEfficiency; transferHeatTo(-workDone); setEnergy(getEnergy() + workDone); - return heatTransferred; + return HeatUtils.simulate(this, Coord4D.get(this), worldObj); } @Override @@ -444,4 +424,18 @@ public class TileEntityHeatGenerator extends TileEntityGenerator implements IFlu { return side == ForgeDirection.DOWN; } + + @Override + public IHeatTransfer getAdjacent(ForgeDirection side) + { + if(side == ForgeDirection.DOWN) + { + TileEntity adj = Coord4D.get(this).getFromSide(side).getTileEntity(worldObj); + if(adj instanceof IHeatTransfer) + { + return (IHeatTransfer)adj; + } + } + return null; + } }