package mekanism.common.util;
import mekanism.api.IHeatTransfer;
import mekanism.api.util.CapabilityUtils;
import mekanism.common.capabilities.Capabilities;
import net.minecraft.util.EnumFacing;
import net.minecraftforge.common.capabilities.ICapabilityProvider;
public class HeatUtils
{
public static double[] simulate(IHeatTransfer source)
{
double heatTransferred[] = new double[] {0, 0};
for(EnumFacing side : EnumFacing.VALUES)
{
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 ICapabilityProvider && CapabilityUtils.hasCapability((ICapabilityProvider)sink, Capabilities.GRID_TRANSMITTER_CAPABILITY, side.getOpposite())))
{
heatTransferred[0] += heatToTransfer;
}
continue;
}
//Transfer to air otherwise
double invConduction = IHeatTransfer.AIR_INVERSE_COEFFICIENT + source.getInsulationCoefficient(side) + source.getInverseConductionCoefficient();
double heatToTransfer = source.getTemp() / invConduction;
source.transferHeatTo(-heatToTransfer);
heatTransferred[1] += heatToTransfer;
}
return heatTransferred;
}
}