blob: 703889bbbe89a51994bab71b56cf7292fb610403 [file] [log] [blame] [raw]
package mekanism.common.multipart;
import java.util.Collection;
import mekanism.api.Coord4D;
import mekanism.api.IHeatTransfer;
import mekanism.api.transmitters.TransmissionType;
import mekanism.client.render.RenderPartTransmitter;
import mekanism.common.ColourRGBA;
import mekanism.common.HeatNetwork;
import mekanism.common.Tier;
import mekanism.common.Tier.BaseTier;
import mekanism.common.Tier.ConductorTier;
import mekanism.common.util.HeatUtils;
//import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.client.renderer.texture.TextureAtlasSprite;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.network.PacketBuffer;
import net.minecraft.tileentity.TileEntity;
//import net.minecraft.util.IIcon;
import net.minecraft.util.EnumFacing;
/*
import codechicken.lib.colour.ColourRGBA;
import codechicken.lib.data.MCDataInput;
import codechicken.lib.data.MCDataOutput;
import codechicken.lib.vec.Vector3;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
*/
public class PartThermodynamicConductor extends PartTransmitter<IHeatTransfer, HeatNetwork> implements IHeatTransfer
{
public Tier.ConductorTier tier;
public static TransmitterIcons conductorIcons = new TransmitterIcons(4, 8);
public double temperature = 0;
public double clientTemperature = 0;
public double heatToAbsorb = 0;
public PartThermodynamicConductor(Tier.ConductorTier conductorTier)
{
super();
tier = conductorTier;
}
@Override
public HeatNetwork createNewNetwork()
{
return new HeatNetwork();
}
@Override
public HeatNetwork createNetworkByMerging(Collection networks)
{
return new HeatNetwork(networks);
}
@Override
public int getCapacity()
{
return 0;
}
@Override
public Object getBuffer()
{
return null;
}
@Override
public void takeShare() {}
@Override
public void updateShare() {}
public static void registerIcons(TextureMap register)
{
conductorIcons.registerCenterIcons(register, new String[] {"ThermodynamicConductorBasic", "ThermodynamicConductorAdvanced",
"ThermodynamicConductorElite", "ThermodynamicConductorUltimate"});
conductorIcons.registerSideIcons(register, new String[] {"SmallTransmitterVerticalBasic", "SmallTransmitterVerticalAdvanced", "SmallTransmitterVerticalElite", "SmallTransmitterVerticalUltimate",
"SmallTransmitterHorizontalBasic", "SmallTransmitterHorizontalAdvanced", "SmallTransmitterHorizontalElite", "SmallTransmitterHorizontalUltimate"});
}
@Override
public TextureAtlasSprite getCenterIcon(boolean opaque)
{
return conductorIcons.getCenterIcon(tier.ordinal());
}
@Override
public TextureAtlasSprite getSideIcon(boolean opaque)
{
return conductorIcons.getSideIcon(tier.ordinal());
}
@Override
public TextureAtlasSprite getSideIconRotated(boolean opaque)
{
return conductorIcons.getSideIcon(4+tier.ordinal());
}
@Override
public TransmitterType getTransmitterType()
{
return tier.type;
}
@Override
public boolean isValidAcceptor(TileEntity tile, EnumFacing side)
{
return tile instanceof IHeatTransfer && ((IHeatTransfer)tile).canConnectHeat(side.getOpposite());
}
@Override
public TransmissionType getTransmissionType()
{
return TransmissionType.HEAT;
}
@Override
public String getType()
{
return "mekanism:thermodynamic_conductor_" + tier.name().toLowerCase();
}
@Override
public boolean onRightClick(EntityPlayer player, EnumFacing side)
{
if(!getWorld().isRemote)
{
temperature += 10000; //TODO remove
}
return true;
}
/*
@Override
@SideOnly(Side.CLIENT)
public void renderDynamic(Vector3 pos, float f, int pass)
{
if(pass == 0)
{
RenderPartTransmitter.getInstance().renderContents(this, pos);
}
}
*/
@Override
public void readFromNBT(NBTTagCompound nbtTags)
{
super.readFromNBT(nbtTags);
temperature = nbtTags.getDouble("temperature");
}
@Override
public void writeToNBT(NBTTagCompound nbtTags)
{
super.writeToNBT(nbtTags);
nbtTags.setDouble("temperature", temperature);
}
public void sendTemp()
{
/*
PacketBuffer packet = getWriteStream();
packet.writeBoolean(true);
packet.writeDouble(temperature);
*/
}
@Override
public void writeUpdatePacket(PacketBuffer packet)
{
packet.writeBoolean(false);
super.writeUpdatePacket(packet);
packet.writeInt(tier.ordinal());
}
@Override
public void readUpdatePacket(PacketBuffer packet)
{
if(packet.readBoolean())
{
temperature = packet.readDouble();
}
else {
super.writeUpdatePacket(packet);
tier = ConductorTier.values()[packet.readInt()];
}
}
public ColourRGBA getBaseColour()
{
return tier.baseColour;
}
@Override
public double getTemp()
{
return temperature;
}
@Override
public double getInverseConductionCoefficient()
{
return tier.inverseConduction;
}
@Override
public double getInsulationCoefficient(EnumFacing side)
{
return tier.inverseConductionInsulation;
}
@Override
public void transferHeatTo(double heat)
{
heatToAbsorb += heat;
}
@Override
public double[] simulateHeat()
{
return HeatUtils.simulate(this);
}
@Override
public double applyTemperatureChange()
{
temperature += tier.inverseHeatCapacity * heatToAbsorb;
heatToAbsorb = 0;
if(Math.abs(temperature - clientTemperature) > (temperature / 100))
{
clientTemperature = temperature;
sendTemp();
}
return temperature;
}
@Override
public boolean canConnectHeat(EnumFacing side)
{
return true;
}
@Override
public IHeatTransfer getAdjacent(EnumFacing side)
{
if(connectionMapContainsSide(getAllCurrentConnections(), side))
{
TileEntity adj = getWorld().getTileEntity(getPos().offset(side));
if(adj instanceof IHeatTransfer)
{
return (IHeatTransfer)adj;
}
}
return null;
}
@Override
public boolean upgrade(int tierOrdinal)
{
if(tier.ordinal() < BaseTier.ULTIMATE.ordinal() && tierOrdinal == tier.ordinal()+1)
{
tier = ConductorTier.values()[tier.ordinal()+1];
markDirtyTransmitters();
sendDesc = true;
return true;
}
return false;
}
}