package mods.eln.transparentnode.windturbine;
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.PowerSource;
import mods.eln.sim.nbt.NbtElectricalLoad;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
public class WindTurbineElement extends TransparentNodeElement {
private final NbtElectricalLoad positiveLoad = new NbtElectricalLoad("positiveLoad");
final PowerSource powerSource = new PowerSource("powerSource", positiveLoad);
private final WindTurbineSlowProcess slowProcess = new WindTurbineSlowProcess("slowProcess", this);
final WindTurbineDescriptor descriptor;
private Direction cableFront = Direction.ZP;
public WindTurbineElement(TransparentNode transparentNode, TransparentNodeDescriptor descriptor) {
super(transparentNode, descriptor);
this.descriptor = (WindTurbineDescriptor) descriptor;
electricalLoadList.add(positiveLoad);
electricalComponentList.add(powerSource);
slowProcessList.add(new NodePeriodicPublishProcess(transparentNode, 4, 4));
slowProcessList.add(slowProcess);
}
@Override
public ElectricalLoad getElectricalLoad(Direction side, LRDU lrdu) {
if (lrdu != LRDU.Down) return null;
if (side == cableFront.left()) return positiveLoad;
return null;
}
@Override
public ThermalLoad getThermalLoad(Direction side, LRDU lrdu) {
return null;
}
@Override
public int getConnectionMask(Direction side, LRDU lrdu) {
if (lrdu != LRDU.Down) return 0;
if (side == cableFront.left()) return NodeBase.maskElectricalPower;
if (side == cableFront.right() && !grounded) return NodeBase.maskElectricalPower;
return 0;
}
@Override
public String multiMeterString(Direction side) {
return null;
}
@Override
public String thermoMeterString(Direction side) {
return null;
}
@Override
public void initialize() {
setPhysicalValue();
powerSource.setImax(descriptor.nominalPower * 5 / descriptor.maxVoltage);
connect();
}
private void setPhysicalValue() {
descriptor.cable.applyTo(positiveLoad);
}
@Override
public boolean onBlockActivated(EntityPlayer entityPlayer, Direction side, float vx, float vy, float vz) {
if (Utils.isPlayerUsingWrench(entityPlayer)) {
cableFront = cableFront.right();
reconnect();
}
return false;
}
@Override
public void networkSerialize(DataOutputStream stream) {
super.networkSerialize(stream);
try {
stream.writeFloat((float) slowProcess.getWind());
stream.writeFloat((float) (powerSource.getP() / descriptor.nominalPower));
node.lrduCubeMask.getTranslate(Direction.YN).serialize(stream);
} catch (IOException e) {
e.printStackTrace();
}
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
cableFront.writeToNBT(nbt, "cableFront");
Utils.println(cableFront);
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
cableFront = Direction.readFromNBT(nbt, "cableFront");
Utils.println(cableFront);
}
@Override
public Map<String, String> getWaila() {
Map<String, String> wailaList = new HashMap<String, String>();
wailaList.put(I18N.tr("Generating"), slowProcess.getWind() > 0 ? I18N.tr("Yes") : I18N.tr("No"));
wailaList.put(I18N.tr("Produced power"), Utils.plotPower("", powerSource.getEffectiveP()));
if (Eln.wailaEasyMode) {
wailaList.put("Voltage", Utils.plotVolt("", powerSource.getU()));
}
return wailaList;
}
}