package mods.eln.transparentnode.turbine; import mods.eln.Eln; import mods.eln.i18n.I18N; import mods.eln.misc.Direction; import mods.eln.misc.LRDU; import mods.eln.misc.Utils; import mods.eln.node.NodeBase; import mods.eln.node.NodePeriodicPublishProcess; import mods.eln.node.transparent.TransparentNode; import mods.eln.node.transparent.TransparentNodeDescriptor; import mods.eln.node.transparent.TransparentNodeElement; import mods.eln.sim.ElectricalLoad; import mods.eln.sim.ThermalLoad; import mods.eln.sim.mna.component.Resistor; import mods.eln.sim.mna.component.VoltageSource; import mods.eln.sim.nbt.NbtElectricalLoad; import mods.eln.sim.nbt.NbtThermalLoad; import mods.eln.sim.process.destruct.ThermalLoadWatchDog; import mods.eln.sim.process.destruct.VoltageStateWatchDog; import mods.eln.sim.process.destruct.WorldExplosion; import net.minecraft.entity.player.EntityPlayer; import java.io.DataOutputStream; import java.io.IOException; import java.util.HashMap; import java.util.Map; public class TurbineElement extends TransparentNodeElement { private final NbtElectricalLoad inputLoad = new NbtElectricalLoad("inputLoad"); public final NbtElectricalLoad positiveLoad = new NbtElectricalLoad("positiveLoad"); private final Resistor inputToTurbineResistor = new Resistor(inputLoad, positiveLoad); public final NbtThermalLoad warmLoad = new NbtThermalLoad("warmLoad"); public final NbtThermalLoad coolLoad = new NbtThermalLoad("coolLoad"); public final VoltageSource electricalPowerSourceProcess = new VoltageSource("PowerSource", positiveLoad, null); private final TurbineThermalProcess turbineThermaltProcess = new TurbineThermalProcess(this); private final TurbineElectricalProcess turbineElectricalProcess = new TurbineElectricalProcess(this); final TurbineDescriptor descriptor; public TurbineElement(TransparentNode transparentNode, TransparentNodeDescriptor descriptor) { super(transparentNode, descriptor); this.descriptor = (TurbineDescriptor) descriptor; electricalLoadList.add(inputLoad); electricalLoadList.add(positiveLoad); electricalComponentList.add(inputToTurbineResistor); thermalLoadList.add(warmLoad); thermalLoadList.add(coolLoad); electricalComponentList.add(electricalPowerSourceProcess); thermalFastProcessList.add(turbineThermaltProcess); WorldExplosion exp = new WorldExplosion(this).machineExplosion(); slowProcessList.add(thermalWatchdog); thermalWatchdog .set(warmLoad) .setTMax(this.descriptor.nominalDeltaT * 2) .set(exp); slowProcessList.add(voltageWatchdog.set(positiveLoad).setUNominal(this.descriptor.nominalU).set(exp)); slowProcessList.add(new NodePeriodicPublishProcess(node, 1., .5)); } private final VoltageStateWatchDog voltageWatchdog = new VoltageStateWatchDog(); private final ThermalLoadWatchDog thermalWatchdog = new ThermalLoadWatchDog(); @Override public void connectJob() { super.connectJob(); Eln.simulator.mna.addProcess(turbineElectricalProcess); } @Override public void disconnectJob() { super.disconnectJob(); Eln.simulator.mna.removeProcess(turbineElectricalProcess); } @Override public ElectricalLoad getElectricalLoad(Direction side, LRDU lrdu) { if (lrdu != LRDU.Down) return null; if (side == front) return inputLoad; if (side == front.back()) return inputLoad; return null; } @Override public ThermalLoad getThermalLoad(Direction side, LRDU lrdu) { if (side == front.left()) return warmLoad; if (side == front.right()) return coolLoad; return null; } @Override public int getConnectionMask(Direction side, LRDU lrdu) { if (lrdu == LRDU.Down) { if (side == front) return NodeBase.maskElectricalPower; if (side == front.back()) return NodeBase.maskElectricalPower; if (side == front.left()) return NodeBase.maskThermal; if (side == front.right()) return NodeBase.maskThermal; } return 0; } @Override public String multiMeterString(Direction side) { if (side == front.left()) return ""; if (side == front.right()) return ""; if (side == front || side == front.back()) return Utils.plotVolt("U+:", positiveLoad.getU()) + Utils.plotAmpere("I+:", positiveLoad.getCurrent()); return Utils.plotVolt("U:", positiveLoad.getU()) + Utils.plotAmpere("I:", positiveLoad.getCurrent()); } @Override public String thermoMeterString(Direction side) { if (side == front.left()) return Utils.plotCelsius("T+:", warmLoad.Tc) + Utils.plotPower("P+:", warmLoad.getPower()); if (side == front.right()) return Utils.plotCelsius("T-:", coolLoad.Tc) + Utils.plotPower("P-:", coolLoad.getPower()); return Utils.plotCelsius("dT:", warmLoad.Tc - coolLoad.Tc) + Utils.plotPercent("Eff:", turbineThermaltProcess.getEfficiency()); } @Override public void initialize() { descriptor.applyTo(inputLoad); inputToTurbineResistor.setR(descriptor.electricalRs * 30); descriptor.applyTo(warmLoad); descriptor.applyTo(coolLoad); connect(); } @Override public boolean onBlockActivated(EntityPlayer entityPlayer, Direction side, float vx, float vy, float vz) { return false; } public float getLightOpacity() { return 1.0f; } @Override public void networkSerialize(DataOutputStream stream) { super.networkSerialize(stream); node.lrduCubeMask.getTranslate(front.down()).serialize(stream); try { stream.writeFloat((float) (warmLoad.Tc - coolLoad.Tc)); } catch (IOException e) { e.printStackTrace(); } } @Override public Map<String, String> getWaila() { Map<String, String> info = new HashMap<String, String>(); info.put(I18N.tr("Nominal") + " \u0394T", (warmLoad.Tc - coolLoad.Tc == descriptor.nominalDeltaT ? I18N.tr("Yes") : I18N.tr("No"))); info.put(I18N.tr("Generated power"), Utils.plotPower("", electricalPowerSourceProcess.getP())); if (Eln.wailaEasyMode) { info.put("\u0394T", Utils.plotCelsius("", warmLoad.Tc - coolLoad.Tc)); info.put(I18N.tr("Voltage"), Utils.plotVolt("", electricalPowerSourceProcess.getU())); } return info; } }