package mods.eln.sixnode.electricalwatch; import mods.eln.misc.*; import mods.eln.misc.Obj3D.Obj3DPart; import mods.eln.node.six.SixNodeDescriptor; 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.List; import java.util.Locale; public class ElectricalWatchDescriptor extends SixNodeDescriptor { private Obj3DPart base, cHour, cMin; //Analog private Obj3DPart digits[] = new Obj3DPart[4]; //Digital private Obj3DPart dot, glass; //Digital enum Kind {ANALOG, DIGITAL} ; private Kind kind; double powerConsumtion; Obj3D obj; public ElectricalWatchDescriptor(String name, Obj3D obj, double powerConsumtion) { super(name, ElectricalWatchElement.class, ElectricalWatchRender.class); this.obj = obj; this.powerConsumtion = powerConsumtion; kind = Kind.valueOf(obj.getString("type").toUpperCase(Locale.ROOT)); if (obj != null) { if (kind == Kind.ANALOG) { base = obj.getPart("base"); cHour = obj.getPart("cHour"); cMin = obj.getPart("cMin"); } else if (kind == Kind.DIGITAL) { base = obj.getPart("base"); glass = obj.getPart("glass"); dot = obj.getPart("digitDot"); digits[3] = obj.getPart("digit3"); digits[2] = obj.getPart("digit2"); digits[1] = obj.getPart("digit1"); digits[0] = obj.getPart("digit0"); } } voltageLevelColor = VoltageLevelColor.Neutral; } void draw(float hour, float min, boolean isEnergyAvailable) { if (kind == Kind.ANALOG) { if (base != null) base.draw(); if (cHour != null) cHour.draw(360 * hour, -1, 0, 0); if (cMin != null) cMin.draw(360 * min, -1, 0, 0); } else if (kind == Kind.DIGITAL) { //Digits obj.bindTexture("Digits.png"); UtilsClient.disableLight(); GL11.glColor3f(0.95f, 0.f, 0.f); if (isEnergyAvailable) { int fulltimeMin = (int) (12.0f * 60.0f * hour); int timeHour = fulltimeMin / 60; int timeMin = fulltimeMin % 60; int tmp = timeMin % 10; digits[0].draw(tmp / 16.f, 0.0f); tmp = timeMin / 10; digits[1].draw(tmp / 16.f, 0.0f); tmp = timeHour % 10; digits[2].draw(tmp / 16.f, 0.0f); tmp = timeHour / 10; digits[3].draw(tmp / 16.f, 0.0f); if ((fulltimeMin & 0x01) != 0x00) GL11.glColor3f(0.05f, 0.f, 0.f); dot.draw(); } else { for (int idx = 0; idx < 4; idx++) digits[idx].draw(10.f / 16.f, 0.f); GL11.glColor3f(0.05f, 0.f, 0.f); dot.draw(); } GL11.glColor3f(1.f, 1.f, 1.f); UtilsClient.enableLight(); //Frame base.draw(); //Glass (reflections) UtilsClient.enableBlend(); //UtilsClient.enableBilinear(); 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) Minecraft.getMinecraft().thePlayer.posZ)) / 64.f; glass.draw(rotYaw + pos, rotPitch * 0.875f); //UtilsClient.disableBilinear(); //BUG: Not always disabled. UtilsClient.disableBlend(); } } @Override public void setParent(Item item, int damage) { super.setParent(item, damage); //Data.addSignal(newItemStack()); } @Override public void addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean par4) { super.addInformation(itemStack, entityPlayer, list, par4); //list.add("Max range : " + (int)maxRange); } @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 { GL11.glRotatef(90, 1, 0, 0); draw(0.1f, 0.2f, true); } } @Override public LRDU getFrontFromPlace(Direction side, EntityPlayer player) { return super.getFrontFromPlace(side, player).left(); } }