2014-12-19 04:46:23 +00:00
package mekanism.common ;
import java.util.Collection ;
import java.util.Set ;
import mekanism.api.IHeatTransfer ;
import mekanism.api.transmitters.DynamicNetwork ;
import mekanism.api.transmitters.IGridTransmitter ;
2016-02-24 20:29:50 -05:00
import mekanism.api.util.UnitDisplayUtils.TemperatureUnit ;
import mekanism.common.multipart.MultipartTransmitter ;
import mekanism.common.util.MekanismUtils ;
2014-12-19 04:46:23 +00:00
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 ;
2015-04-01 02:42:36 +01:00
public HeatNetwork () {}
2014-12-19 04:46:23 +00:00
2015-04-01 02:42:36 +01:00
public HeatNetwork ( Collection < HeatNetwork > networks )
2014-12-19 04:46:23 +00:00
{
for ( HeatNetwork net : networks )
{
if ( net != null )
{
2015-04-01 02:42:36 +01:00
adoptTransmittersAndAcceptorsFrom ( net );
2014-12-19 04:46:23 +00:00
net . deregister ();
}
}
register ();
}
@Override
public String getNeededInfo ()
{
return "Not Applicable" ;
}
@Override
public String getStoredInfo ()
{
2016-02-24 20:29:50 -05:00
return MekanismUtils . getTemperatureDisplay ( meanTemp , TemperatureUnit . KELVIN ) + " above ambient" ;
2014-12-19 04:46:23 +00:00
}
@Override
public String getFlowInfo ()
{
2016-02-24 20:29:50 -05:00
return MekanismUtils . getTemperatureDisplay ( heatTransferred , TemperatureUnit . KELVIN ) + " transferred to acceptors, " + MekanismUtils . getTemperatureDisplay ( heatLost , TemperatureUnit . KELVIN ) + " lost to environment, " + ( heatTransferred + heatLost == 0 ? "" : heatTransferred / ( heatTransferred + heatLost ) * 100 + "% efficiency" );
2014-12-19 04:46:23 +00:00
}
@Override
2015-04-01 02:42:36 +01:00
public void absorbBuffer ( IGridTransmitter < IHeatTransfer , HeatNetwork > transmitter ) {}
2014-12-19 04:46:23 +00:00
@Override
2015-04-01 02:42:36 +01:00
public void clampBuffer () {}
2014-12-19 04:46:23 +00:00
@Override
2015-04-01 02:42:36 +01:00
public Set < IHeatTransfer > getAcceptors ( Object data )
2014-12-19 04:46:23 +00:00
{
2015-04-01 02:42:36 +01:00
return null ;
2014-12-19 04:46:23 +00:00
}
@Override
public void onUpdate ()
{
super . onUpdate ();
double newSumTemp = 0 ;
double newHeatLost = 0 ;
double newHeatTransferred = 0 ;
if ( FMLCommonHandler . instance (). getEffectiveSide (). isServer ())
{
2015-04-01 02:42:36 +01:00
for ( IGridTransmitter < IHeatTransfer , HeatNetwork > transmitter : transmitters )
2014-12-19 04:46:23 +00:00
{
2016-02-24 20:29:50 -05:00
if ( transmitter instanceof MultipartTransmitter && (( MultipartTransmitter ) transmitter ). getPart () instanceof IHeatTransfer )
2014-12-19 04:46:23 +00:00
{
2016-02-24 20:29:50 -05:00
IHeatTransfer heatTransmitter = ( IHeatTransfer )(( MultipartTransmitter ) transmitter ). getPart ();
2014-12-19 04:46:23 +00:00
double [] d = heatTransmitter . simulateHeat ();
newHeatTransferred += d [ 0 ] ;
newHeatLost += d [ 1 ] ;
}
}
2015-02-17 21:27:35 -05:00
2015-04-01 02:42:36 +01:00
for ( IGridTransmitter < IHeatTransfer , HeatNetwork > transmitter : transmitters )
2014-12-19 04:46:23 +00:00
{
2016-02-24 20:29:50 -05:00
if ( transmitter instanceof MultipartTransmitter && (( MultipartTransmitter ) transmitter ). getPart () instanceof IHeatTransfer )
2014-12-19 04:46:23 +00:00
{
2016-02-24 20:29:50 -05:00
IHeatTransfer heatTransmitter = ( IHeatTransfer )(( MultipartTransmitter ) transmitter ). getPart ();
2014-12-19 04:46:23 +00:00
newSumTemp += heatTransmitter . applyTemperatureChange ();
}
}
}
2015-02-17 21:27:35 -05:00
2014-12-19 04:46:23 +00:00
heatLost = newHeatLost ;
heatTransferred = newHeatTransferred ;
meanTemp = newSumTemp / transmitters . size ();
}
}