package mods.eln.sixnode.electricalmath; import mods.eln.Eln; import mods.eln.cable.CableRenderDescriptor; import mods.eln.misc.*; import mods.eln.node.six.SixNodeDescriptor; import mods.eln.node.six.SixNodeElementInventory; import mods.eln.node.six.SixNodeElementRender; import mods.eln.node.six.SixNodeEntity; import net.minecraft.client.gui.GuiScreen; import net.minecraft.entity.player.EntityPlayer; import org.lwjgl.opengl.GL11; import java.io.DataInputStream; import java.io.IOException; public class ElectricalMathRender extends SixNodeElementRender { ElectricalMathDescriptor descriptor; Coordonate coord; PhysicalInterpolator interpolator; SixNodeElementInventory inventory = new SixNodeElementInventory(1, 64, this); String expression; public int redstoneRequired; public boolean equationIsValid; float ledTime = 0f; boolean[] ledOn = new boolean[8]; public ElectricalMathRender(SixNodeEntity tileEntity, Direction side, SixNodeDescriptor descriptor) { super(tileEntity, side, descriptor); this.descriptor = (ElectricalMathDescriptor) descriptor; interpolator = new PhysicalInterpolator(0.4f, 8.0f, 0.9f, 0.2f); coord = new Coordonate(tileEntity); ledOn[0] = true; ledOn[4] = true; } @Override public GuiScreen newGuiDraw(Direction side, EntityPlayer player) { return new ElectricalMathGui(player, inventory, this); } @Override public void publishUnserialize(DataInputStream stream) { super.publishUnserialize(stream); try { expression = stream.readUTF(); redstoneRequired = stream.readInt(); equationIsValid = stream.readBoolean(); } catch (IOException e) { e.printStackTrace(); } } @Override public void draw() { super.draw(); float[] pinDistances = null; if (side.isY()) { pinDistances = front.rotate4PinDistances(descriptor.pinDistance); } else { pinDistances = descriptor.pinDistance; } if (UtilsClient.distanceFromClientPlayer(tileEntity) < 15) { GL11.glColor3f(0, 0, 0); UtilsClient.drawConnectionPinSixNode(front, pinDistances, 1.8f, 1.35f); GL11.glColor3f(1, 0, 0); UtilsClient.drawConnectionPinSixNode(front.right(), pinDistances, 1.8f, 1.35f); GL11.glColor3f(0, 1, 0); UtilsClient.drawConnectionPinSixNode(front.inverse(), pinDistances, 1.8f, 1.35f); GL11.glColor3f(0, 0, 1); UtilsClient.drawConnectionPinSixNode(front.left(), pinDistances, 1.8f, 1.35f); GL11.glColor3f(1, 1, 1); } if (side.isY()) { front.left().glRotateOnX(); } descriptor.draw(interpolator.get(), ledOn); } @Override public void refresh(float deltaT) { ledTime += deltaT; if (ledTime > 0.4) { for (int idx = 1; idx <= 3; idx++) { ledOn[idx] = Math.random() < 0.3; } for (int idx = 5; idx <= 7; idx++) { ledOn[idx] = Math.random() < 0.3; } ledTime = 0; } if (!Utils.isPlayerAround(tileEntity.getWorldObj(), coord.getAxisAlignedBB(0))) interpolator.setTarget(0f); else interpolator.setTarget(1f); interpolator.step(deltaT); } @Override public CableRenderDescriptor getCableRender(LRDU lrdu) { return Eln.instance.signalCableDescriptor.render; } }