package mekanism.common; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; import java.util.Set; import mekanism.api.IHeatTransfer; import mekanism.api.transmitters.DynamicNetwork; import mekanism.api.transmitters.IGridTransmitter; import mekanism.api.transmitters.TransmissionType; import cpw.mods.fml.common.FMLCommonHandler; public class HeatNetwork extends DynamicNetwork<IHeatTransfer, HeatNetwork> { public double meanTemp = 0; public double heatLost = 0; public double heatTransferred = 0; public HeatNetwork() {} public HeatNetwork(Collection<HeatNetwork> networks) { for(HeatNetwork net : networks) { if(net != null) { adoptTransmittersAndAcceptorsFrom(net); net.deregister(); } } register(); } @Override public String getNeededInfo() { return "Not Applicable"; } @Override public String getStoredInfo() { return meanTemp + "K above ambient"; } @Override public String getFlowInfo() { return heatTransferred + " transferred to acceptors, " + heatLost + " lost to environment, " + (heatTransferred + heatLost == 0 ? "" : heatTransferred / (heatTransferred + heatLost) * 100 + "% efficiency"); } @Override public void absorbBuffer(IGridTransmitter<IHeatTransfer, HeatNetwork> transmitter) {} @Override public void clampBuffer() {} @Override public Set<IHeatTransfer> getAcceptors(Object data) { return null; } @Override public void onUpdate() { super.onUpdate(); double newSumTemp = 0; double newHeatLost = 0; double newHeatTransferred = 0; if(FMLCommonHandler.instance().getEffectiveSide().isServer()) { for(IGridTransmitter<IHeatTransfer, HeatNetwork> transmitter : transmitters) { if(transmitter instanceof IHeatTransfer) { IHeatTransfer heatTransmitter = (IHeatTransfer)transmitter; double[] d = heatTransmitter.simulateHeat(); newHeatTransferred += d[0]; newHeatLost += d[1]; } } for(IGridTransmitter<IHeatTransfer, HeatNetwork> transmitter : transmitters) { if(transmitter instanceof IHeatTransfer) { IHeatTransfer heatTransmitter = (IHeatTransfer)transmitter; newSumTemp += heatTransmitter.applyTemperatureChange(); } } } heatLost = newHeatLost; heatTransferred = newHeatTransferred; meanTemp = newSumTemp / transmitters.size(); } }