package mods.eln.transparentnode.transformer; import mods.eln.misc.Obj3D; import mods.eln.misc.Obj3D.Obj3DPart; import mods.eln.misc.VoltageLevelColor; import mods.eln.node.transparent.TransparentNodeDescriptor; import mods.eln.wiki.Data; 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 TransformerDescriptor extends TransparentNodeDescriptor { public final float minimalLoadToHum; public TransformerDescriptor(String name, Obj3D obj, Obj3D defaultFeroObj, Obj3D casing, float minimalLoadToHum) { super(name, TransformerElement.class, TransformerRender.class); this.minimalLoadToHum = minimalLoadToHum; if (obj != null) { main = obj.getPart("main"); sbire = obj.getPart("sbire"); } if (defaultFeroObj != null) { defaultFero = defaultFeroObj.getPart("fero"); } if (casing != null) { this.casing = casing.getPart("Case"); casingDoorR = casing.getPart("DoorR"); casingDoorL = casing.getPart("DoorL"); } voltageLevelColor = VoltageLevelColor.Neutral; } @Override public void setParent(Item item, int damage) { super.setParent(item, damage); Data.addWiring(newItemStack()); } private Obj3DPart main; private Obj3DPart defaultFero; private Obj3DPart sbire; private Obj3DPart casing; private Obj3DPart casingDoorR; private Obj3DPart casingDoorL; @Override public void addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean par4) { super.addInformation(itemStack, entityPlayer, list, par4); Collections.addAll(list, tr("Transforms an input voltage to\nan output voltage.").split("\n")); Collections.addAll(list, tr("The voltage ratio is proportional\nto the cable stacks count ratio.").split("\n")); } @Override public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { return type != ItemRenderType.INVENTORY; } @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { return true; } @Override public void renderItem(ItemRenderType type, ItemStack item, Object... data) { if (type == ItemRenderType.INVENTORY) { super.renderItem(type, item, data); } else { draw(defaultFero, 1, 4, false, 0f); } } void draw(Obj3DPart fero, int priCableNbr, int secCableNbr, boolean hasCasing, float doorOpen) { if (main != null) main.draw(); if (fero != null) { fero.draw(); if (priCableNbr != 0) { GL11.glPushMatrix(); float y = (priCableNbr - 1) * 1f / 16f; GL11.glTranslatef(0f, -y, 0f); for (int idx = 0; idx < priCableNbr; idx++) { sbire.draw(); GL11.glTranslatef(0f, 2f / 16f, 0f); } GL11.glPopMatrix(); } if (secCableNbr != 0) { GL11.glPushMatrix(); GL11.glRotatef(180, 0f, 1f, 0f); float y = (secCableNbr - 1) * 1f / 16f; GL11.glTranslatef(0f, -y, 0f); for (int idx = 0; idx < secCableNbr; idx++) { sbire.draw(); GL11.glTranslatef(0f, 2f / 16f, 0f); } GL11.glPopMatrix(); } } if (hasCasing) { if (casing != null) casing.draw(); if (casingDoorR != null) casingDoorR.draw(doorOpen * 90, 0f, 1f, 0f); if (casingDoorL != null) casingDoorL.draw(-doorOpen * 90, 0f, 1f, 0f); } } }