package mods.eln.transparentnode.electricalantennarx;
import mods.eln.Eln;
import mods.eln.i18n.I18N;
import mods.eln.misc.Coordonate;
import mods.eln.misc.Direction;
import mods.eln.misc.LRDU;
import mods.eln.misc.Utils;
import mods.eln.node.NodeBase;
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.NbtElectricalGateInput;
import mods.eln.sim.nbt.NbtElectricalLoad;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.nbt.NBTTagCompound;
import java.io.DataOutputStream;
import java.util.HashMap;
import java.util.Map;
public class ElectricalAntennaRxElement extends TransparentNodeElement {
ElectricalAntennaRxSlowProcess slowProcess = new ElectricalAntennaRxSlowProcess(this);
NbtElectricalLoad powerOut = new NbtElectricalLoad("powerOut");
NbtElectricalGateInput signalIn = new NbtElectricalGateInput("signalIn");
PowerSource powerSrc = new PowerSource("powerSrc", powerOut);
LRDU rot = LRDU.Up;
Coordonate rxCoord = null;
ElectricalAntennaRxDescriptor descriptor;
public double getSignal() {
return signalIn.getBornedU();
}
public void setPowerOut(double power) {
powerSrc.setP(power);
}
public void rxDisconnect() {
powerSrc.setP(0.0);
}
public ElectricalAntennaRxElement(TransparentNode transparentNode, TransparentNodeDescriptor descriptor) {
super(transparentNode, descriptor);
slowProcessList.add(slowProcess);
electricalLoadList.add(powerOut);
electricalLoadList.add(signalIn);
electricalComponentList.add(powerSrc);
this.descriptor = (ElectricalAntennaRxDescriptor) descriptor;
}
@Override
public ElectricalLoad getElectricalLoad(Direction side, LRDU lrdu) {
if (front.getInverse() != side.applyLRDU(lrdu)) return null;
if (side == front.applyLRDU(rot.left())) return powerOut;
if (side == front.applyLRDU(rot.right())) return signalIn;
return null;
}
@Override
public ThermalLoad getThermalLoad(Direction side, LRDU lrdu) {
return null;
}
@Override
public int getConnectionMask(Direction side, LRDU lrdu) {
if (front.getInverse() != side.applyLRDU(lrdu)) return 0;
if (side == front.applyLRDU(rot.left())) return NodeBase.maskElectricalPower;
if (side == front.applyLRDU(rot.right())) return NodeBase.maskElectricalInputGate;
return 0;
}
@Override
public String multiMeterString(Direction side) {
return "";
}
@Override
public String thermoMeterString(Direction side) {
return "";
}
@Override
public void initialize() {
descriptor.cable.applyTo(powerOut);
powerSrc.setUmax(descriptor.electricalMaximalVoltage * 2);
powerSrc.setImax(descriptor.electricalMaximalVoltage * descriptor.electricalMaximalPower * 2);
connect();
}
@Override
public boolean onBlockActivated(EntityPlayer entityPlayer, Direction side, float vx, float vy, float vz) {
if (Utils.isPlayerUsingWrench(entityPlayer)) {
rot = rot.getNextClockwise();
node.reconnect();
return true;
}
return false;
}
@Override
public void readFromNBT(NBTTagCompound nbt) {
super.readFromNBT(nbt);
rot = LRDU.readFromNBT(nbt, "rot");
}
@Override
public void writeToNBT(NBTTagCompound nbt) {
super.writeToNBT(nbt);
rot.writeToNBT(nbt, "rot");
}
public boolean mustHaveFloor() {
return false;
}
public boolean mustHaveCeiling() {
return false;
}
public boolean mustHaveWall() {
return false;
}
public boolean mustHaveWallFrontInverse() {
return true;
}
@Override
public void networkSerialize(DataOutputStream stream) {
super.networkSerialize(stream);
rot.serialize(stream);
node.lrduCubeMask.getTranslate(front.getInverse()).serialize(stream);
}
public Map<String, String> getWaila() {
Map<String, String> info = new HashMap<String, String>();
info.put(I18N.tr("Receiving"), powerSrc.getP() != 0 ? "Yes" : "No");
if (Eln.wailaEasyMode) {
info.put(I18N.tr("Power received"), Utils.plotPower("", powerSrc.getP()));
info.put(I18N.tr("Effective power"), Utils.plotPower("", powerSrc.getEffectiveP()));
}
return info;
}
}