package mods.eln.transparentnode.electricalantennarx;
import mods.eln.Eln;
import mods.eln.cable.CableRender;
import mods.eln.cable.CableRenderDescriptor;
import mods.eln.cable.CableRenderType;
import mods.eln.misc.Direction;
import mods.eln.misc.LRDU;
import mods.eln.misc.LRDUMask;
import mods.eln.misc.Utils;
import mods.eln.node.transparent.TransparentNodeDescriptor;
import mods.eln.node.transparent.TransparentNodeElementRender;
import mods.eln.node.transparent.TransparentNodeEntity;
import org.lwjgl.opengl.GL11;
import java.io.DataInputStream;
public class ElectricalAntennaRxRender extends TransparentNodeElementRender {
ElectricalAntennaRxDescriptor descriptor;
LRDUMask maskTemp = new LRDUMask();
LRDU rot;
LRDUMask lrduConnection = new LRDUMask();
CableRenderType connectionType;
boolean cableRefresh = false;
public ElectricalAntennaRxRender(TransparentNodeEntity tileEntity, TransparentNodeDescriptor descriptor) {
super(tileEntity, descriptor);
this.descriptor = (ElectricalAntennaRxDescriptor) descriptor;
}
@Override
public void draw() {
GL11.glPushMatrix();
front.glRotateXnRef();
rot.glRotateOnX();
descriptor.draw();
GL11.glPopMatrix();
glCableTransforme(front.getInverse());
descriptor.cable.bindCableTexture();
if (cableRefresh) {
cableRefresh = false;
connectionType = CableRender.connectionType(tileEntity, lrduConnection, front.getInverse());
}
for (LRDU lrdu : LRDU.values()) {
Utils.setGlColorFromDye(connectionType.otherdry[lrdu.toInt()]);
if (!lrduConnection.get(lrdu)) continue;
maskTemp.set(1 << lrdu.toInt());
Direction side = front.getInverse().applyLRDU(lrdu);
CableRender.drawCable(getCableRender(side, side.getLRDUGoingTo(front.getInverse())), maskTemp, connectionType);
}
}
@Override
public void networkUnserialize(DataInputStream stream) {
super.networkUnserialize(stream);
rot = LRDU.deserialize(stream);
lrduConnection.deserialize(stream);
cableRefresh = true;
}
@Override
public CableRenderDescriptor getCableRender(Direction side, LRDU lrdu) {
if (front.getInverse() != side.applyLRDU(lrdu)) return null;
if (side == front.applyLRDU(rot.left())) return descriptor.cable.render;
if (side == front.applyLRDU(rot.right())) return Eln.instance.signalCableDescriptor.render;
return null;
}
@Override
public void notifyNeighborSpawn() {
super.notifyNeighborSpawn();
cableRefresh = true;
}
}