package mods.eln.transparentnode.turbine; import mods.eln.Eln; import mods.eln.cable.CableRenderDescriptor; import mods.eln.misc.FunctionTable; import mods.eln.misc.Obj3D; import mods.eln.misc.Obj3D.Obj3DPart; import mods.eln.misc.Utils; import mods.eln.misc.VoltageLevelColor; import mods.eln.node.transparent.TransparentNodeDescriptor; import mods.eln.sim.ElectricalLoad; import mods.eln.sim.PhysicalConstant; import mods.eln.sim.ThermalLoad; import mods.eln.wiki.Data; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import java.util.List; import static mods.eln.i18n.I18N.tr; public class TurbineDescriptor extends TransparentNodeDescriptor { final CableRenderDescriptor eRender; public TurbineDescriptor(String name, String modelName, CableRenderDescriptor eRender, FunctionTable TtoU, FunctionTable PoutToPin, double nominalDeltaT, double nominalU, double nominalP, double nominalPowerLost, double electricalRs, double thermalC, double DeltaTForInput, double powerOutPerDeltaU, String soundFile) { super(name, TurbineElement.class, TurbineRender.class); double nominalEff = Math.abs(1 - (0 + PhysicalConstant.Tref) / (nominalDeltaT + PhysicalConstant.Tref)); this.TtoU = TtoU; this.PoutToPin = PoutToPin; this.nominalDeltaT = nominalDeltaT; this.nominalU = nominalU; this.nominalP = nominalP; this.thermalC = thermalC; this.thermalRs = DeltaTForInput / (nominalP / nominalEff); this.thermalRp = nominalDeltaT / nominalPowerLost; this.electricalRs = electricalRs; this.powerOutPerDeltaU = powerOutPerDeltaU; this.eRender = eRender; this.soundFile = soundFile; Obj3D obj = Eln.obj.getObj(modelName); if (obj != null) { main = obj.getPart("main"); } voltageLevelColor = VoltageLevelColor.fromVoltage(nominalU); } private Obj3DPart main; public final double powerOutPerDeltaU; public final FunctionTable TtoU; public final FunctionTable PoutToPin; public final double nominalDeltaT; public final double nominalU; final double nominalP; private final double thermalC; private final double thermalRs; private final double thermalRp; final double electricalRs; public final String soundFile; public void applyTo(ThermalLoad load) { load.C = thermalC; load.Rp = thermalRp; load.Rs = thermalRs; } @Override public void setParent(Item item, int damage) { super.setParent(item, damage); Data.addThermal(newItemStack()); Data.addEnergy(newItemStack()); } public void applyTo(ElectricalLoad load) { load.setRs(electricalRs); } void draw() { if (main != null) main.draw(); } @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { return true; } @Override public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { return type != ItemRenderType.INVENTORY; } @Override public void renderItem(ItemRenderType type, ItemStack item, Object... data) { if (type == ItemRenderType.INVENTORY) { super.renderItem(type, item, data); } else { draw(); } } @Override public void addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean par4) { super.addInformation(itemStack, entityPlayer, list, par4); list.add(tr("Generates electricity using heat.")); list.add(tr("Nominal usage:")); list.add(" " + tr("Temperature difference: %1$°C", Utils.plotValue(nominalDeltaT))); list.add(" " + tr("Voltage: %1$V", Utils.plotValue(nominalU))); list.add(" " + tr("Power: %1$W", Utils.plotValue(nominalP))); } }