package mods.eln.transparentnode.electricalantennatx; 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 ElectricalAntennaTxRender extends TransparentNodeElementRender { ElectricalAntennaTxDescriptor descriptor; LRDUMask maskTemp = new LRDUMask(); LRDU rot; LRDUMask lrduConnection = new LRDUMask(); CableRenderType connectionType; boolean cableRefresh = false; public ElectricalAntennaTxRender(TransparentNodeEntity tileEntity, TransparentNodeDescriptor descriptor) { super(tileEntity, descriptor); this.descriptor = (ElectricalAntennaTxDescriptor) 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()); if (lrdu == rot) CableRender.drawCable(descriptor.cable.render, maskTemp, connectionType); else if (lrdu == rot.left() || lrdu == rot.right()) CableRender.drawCable(Eln.instance.signalCableDescriptor.render, 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)) return descriptor.cable.render; if (side == front.applyLRDU(rot.left())) return Eln.instance.signalCableDescriptor.render; if (side == front.applyLRDU(rot.right())) return Eln.instance.signalCableDescriptor.render; return null; } @Override public void notifyNeighborSpawn() { super.notifyNeighborSpawn(); cableRefresh = true; } }