package mekanism.common.multipart; import mekanism.api.IHeatTransfer; import mekanism.common.HeatNetwork; import mekanism.common.util.HeatUtils; import net.minecraft.tileentity.TileEntity; import net.minecraftforge.common.util.ForgeDirection; import codechicken.lib.colour.Colour; import codechicken.lib.colour.ColourRGBA; /** * Created by ben on 01/04/15. */ public class MultipartHeatTransmitter extends MultipartTransmitter<IHeatTransfer, HeatNetwork> implements IHeatTransfer { public double temperature = 0; public double clientTemperature = 0; public double heatToAbsorb = 0; public HeatMaterial material = HeatMaterial.DEFAULT; public MultipartHeatTransmitter(PartHeatTransmitter multiPart) { super(multiPart); } @Override public double getTemp() { return temperature; } @Override public double getInverseConductionCoefficient() { return material.inverseConduction; } @Override public double getInsulationCoefficient(ForgeDirection side) { return material.inverseConductionInsulation; } @Override public void transferHeatTo(double heat) { heatToAbsorb += heat; } @Override public double[] simulateHeat() { return HeatUtils.simulate(this); } @Override public double applyTemperatureChange() { temperature += material.inverseHeatCapacity * heatToAbsorb; heatToAbsorb = 0; if(Math.abs(temperature - clientTemperature) > (temperature / 100)) { clientTemperature = temperature; getPart().sendTemp(); } return temperature; } @Override public boolean canConnectHeat(ForgeDirection side) { return true; } @Override public IHeatTransfer getAdjacent(ForgeDirection side) { if(getPart().connectionMapContainsSide(getPart().getAllCurrentConnections(), side)) { TileEntity adj = coord().getFromSide(side).getTileEntity(world()); if(adj instanceof IHeatTransfer) { return (IHeatTransfer)adj; } } return null; } @Override public PartHeatTransmitter getPart() { return (PartHeatTransmitter)containingPart; } public static enum HeatMaterial { DEFAULT(5, 1, 0, new ColourRGBA(0.2, 0.2, 0.2, 1)); double inverseConduction; double inverseHeatCapacity; double inverseConductionInsulation; ColourRGBA baseColour; private HeatMaterial(double inversek, double inverseC, double insulationInversek, ColourRGBA colour) { inverseConduction = inversek; inverseHeatCapacity = inverseC; inverseConductionInsulation = insulationInversek; baseColour = colour; } } }