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
|
@ -23,4 +23,6 @@ public interface IHeatTransfer
|
||||||
public double applyTemperatureChange();
|
public double applyTemperatureChange();
|
||||||
|
|
||||||
public boolean canConnectHeat(ForgeDirection side);
|
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.api.transmitters.TransmissionType;
|
||||||
import mekanism.client.render.RenderPartTransmitter;
|
import mekanism.client.render.RenderPartTransmitter;
|
||||||
import mekanism.common.HeatNetwork;
|
import mekanism.common.HeatNetwork;
|
||||||
|
import mekanism.common.util.HeatUtils;
|
||||||
|
|
||||||
import net.minecraft.client.renderer.texture.IIconRegister;
|
import net.minecraft.client.renderer.texture.IIconRegister;
|
||||||
import net.minecraft.entity.player.EntityPlayer;
|
import net.minecraft.entity.player.EntityPlayer;
|
||||||
|
@ -109,31 +110,7 @@ public class PartHeatTransmitter extends PartTransmitter<HeatNetwork> implements
|
||||||
@Override
|
@Override
|
||||||
public double[] simulateHeat()
|
public double[] simulateHeat()
|
||||||
{
|
{
|
||||||
double heatTransferred[] = new double[]{0,0};
|
return HeatUtils.simulate(this, Coord4D.get(tile()), world());
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -155,6 +132,20 @@ public class PartHeatTransmitter extends PartTransmitter<HeatNetwork> implements
|
||||||
return true;
|
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)
|
public static void registerIcons(IIconRegister register)
|
||||||
{
|
{
|
||||||
heatIcons.registerCenterIcons(register, new String[] {"HeatTransmitter"});
|
heatIcons.registerCenterIcons(register, new String[] {"HeatTransmitter"});
|
||||||
|
|
|
@ -1,5 +1,35 @@
|
||||||
package mekanism.common.util;
|
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 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.base.ISustainedData;
|
||||||
import mekanism.common.util.ChargeUtils;
|
import mekanism.common.util.ChargeUtils;
|
||||||
import mekanism.common.util.FluidContainerUtils;
|
import mekanism.common.util.FluidContainerUtils;
|
||||||
|
import mekanism.common.util.HeatUtils;
|
||||||
import mekanism.common.util.MekanismUtils;
|
import mekanism.common.util.MekanismUtils;
|
||||||
import mekanism.common.util.PipeUtils;
|
import mekanism.common.util.PipeUtils;
|
||||||
|
|
||||||
|
@ -404,31 +405,10 @@ public class TileEntityHeatGenerator extends TileEntityGenerator implements IFlu
|
||||||
@Override
|
@Override
|
||||||
public double[] simulateHeat()
|
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;
|
double workDone = getTemp()*thermalEfficiency;
|
||||||
transferHeatTo(-workDone);
|
transferHeatTo(-workDone);
|
||||||
setEnergy(getEnergy() + workDone);
|
setEnergy(getEnergy() + workDone);
|
||||||
return heatTransferred;
|
return HeatUtils.simulate(this, Coord4D.get(this), worldObj);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -444,4 +424,18 @@ public class TileEntityHeatGenerator extends TileEntityGenerator implements IFlu
|
||||||
{
|
{
|
||||||
return side == ForgeDirection.DOWN;
|
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…
Reference in a new issue