package mods.eln.sixnode.electricaldatalogger; import mods.eln.Eln; import mods.eln.misc.*; import mods.eln.misc.Obj3D.Obj3DPart; import mods.eln.node.six.SixNodeDescriptor; import mods.eln.wiki.Data; import net.minecraft.client.Minecraft; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import org.lwjgl.opengl.GL11; import java.util.Collections; import java.util.List; import static mods.eln.i18n.I18N.tr; public class ElectricalDataLoggerDescriptor extends SixNodeDescriptor { Obj3D obj; Obj3DPart main, led, reflection; float sx, sy, sz; float tx, ty, tz; float rx, ry, rz, ra; float mx, my; float cr, cg, cb; float reflc; public boolean onFloor; public String textColor; public ElectricalDataLoggerDescriptor(String name, boolean onFloor, String objName, float cr, float cg, float cb, String textColor) { super(name, ElectricalDataLoggerElement.class, ElectricalDataLoggerRender.class); this.cb = cb; this.cr = cr; this.cg = cg; this.onFloor = onFloor; this.textColor = textColor; obj = Eln.obj.getObj(objName); if (obj != null) { main = obj.getPart("main"); reflection = obj.getPart("reflection"); if (main != null) { sx = main.getFloat("sx"); sy = main.getFloat("sy"); sz = main.getFloat("sz"); tx = main.getFloat("tx"); ty = main.getFloat("ty"); tz = main.getFloat("tz"); rx = main.getFloat("rx"); ry = main.getFloat("ry"); rz = main.getFloat("rz"); ra = main.getFloat("ra"); mx = main.getFloat("mx"); my = main.getFloat("my"); reflc = main.getFloat("reflc"); led = obj.getPart("led"); } } if (onFloor) { setPlaceDirection(Direction.YN); } voltageLevelColor = VoltageLevelColor.SignalVoltage; } void draw(DataLogs log, Direction side, LRDU front, int objPosMX, int objPosMZ) { if (onFloor || side.isY()) front.glRotateOnX(); if (!onFloor && side.isNotY()) GL11.glRotatef(90, 1, 0, 0); //GL11.glDisable(GL11.GL_TEXTURE_2D); if (main != null) main.draw(); //GL11.glEnable(GL11.GL_TEXTURE_2D); //Glass (reflections) UtilsClient.enableBlend(); obj.bindTexture("Reflection.png"); float rotYaw = Minecraft.getMinecraft().thePlayer.rotationYaw / 360.f; float rotPitch = Minecraft.getMinecraft().thePlayer.rotationPitch / 180.f; float pos = (((float) Minecraft.getMinecraft().thePlayer.posX) - ((float) (objPosMX * 2)) + ((float) Minecraft.getMinecraft().thePlayer.posZ) - ((float) (objPosMZ * 2))) / 24.f; GL11.glColor4f(1, 1, 1, reflc); reflection.draw(rotYaw + pos, rotPitch * 0.857f); UtilsClient.disableBlend(); //Plot if (log != null) { UtilsClient.disableLight(); // GL11.glPushMatrix(); UtilsClient.ledOnOffColor(true); if (led != null) led.draw(); UtilsClient.glDefaultColor(); GL11.glTranslatef(tx, ty, tz); GL11.glRotatef(ra, rx, ry, rz); GL11.glScalef(sx, sy, sz); GL11.glColor4f(cr, cg, cb, 1); log.draw(mx, my, textColor); UtilsClient.glDefaultColor(); UtilsClient.enableLight(); } } @Override public void setParent(Item item, int damage) { super.setParent(item, damage); Data.addSignal(newItemStack()); } @Override public boolean hasVolume() { return onFloor; } @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { return true; } @Override public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { return type != ItemRenderType.INVENTORY; } @Override public boolean shouldUseRenderHelperEln(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { return type != ItemRenderType.INVENTORY; } @Override public void renderItem(ItemRenderType type, ItemStack item, Object... data) { if (type == ItemRenderType.INVENTORY) { super.renderItem(type, item, data); } else { if (main != null) main.draw(); } } @Override public void addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean par4) { super.addInformation(itemStack, entityPlayer, list, par4); Collections.addAll(list, tr("Measures the voltage of an\nelectrical signal and plots\nthe data in real time.").split("\n")); list.add(tr("It can store up to 256 points.")); } @Override public LRDU getFrontFromPlace(Direction side, EntityPlayer player) { LRDU front = super.getFrontFromPlace(side, player); if (onFloor) { return front.inverse(); } else { return front; } } }