Move standard simulation method into a Utils class.
This commit is contained in:
parent
ab2a7cb6c7
commit
8a4aaff44a
4 changed files with 64 additions and 47 deletions
src/main/java/mekanism
api
common
generators/common/tile
|
@ -23,4 +23,6 @@ public interface IHeatTransfer
|
|||
public double applyTemperatureChange();
|
||||
|
||||
public boolean canConnectHeat(ForgeDirection side);
|
||||
|
||||
public IHeatTransfer getAdjacent(ForgeDirection side);
|
||||
}
|
||||
|
|
|
@ -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<HeatNetwork> 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<HeatNetwork> 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"});
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue