package mods.eln.sixnode.batterycharger; import mods.eln.misc.*; import mods.eln.misc.Obj3D.Obj3DPart; import mods.eln.node.six.SixNodeDescriptor; import mods.eln.sim.mna.component.Resistor; import mods.eln.sim.nbt.NbtElectricalLoad; import mods.eln.sixnode.electricalcable.ElectricalCableDescriptor; 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 BatteryChargerDescriptor extends SixNodeDescriptor { private Obj3D obj; Obj3DPart main; public double nominalVoltage; public double nominalPower; public ElectricalCableDescriptor cable; double Rp; public float[] pinDistance; Obj3DPart[] leds = new Obj3DPart[4]; public BatteryChargerDescriptor(String name, Obj3D obj, ElectricalCableDescriptor cable, double nominalVoltage, double nominalPower) { super(name, BatteryChargerElement.class, BatteryChargerRender.class); this.nominalVoltage = nominalVoltage; this.nominalPower = nominalPower; this.Rp = nominalVoltage * nominalVoltage / nominalPower; this.obj = obj; this.cable = cable; if (obj != null) { main = obj.getPart("main"); for (int idx = 0; idx < 4; idx++) { leds[idx] = obj.getPart("led" + idx); } pinDistance = Utils.getSixNodePinDistance(main); } setDefaultIcon("batterycharger"); voltageLevelColor = VoltageLevelColor.fromVoltage(nominalVoltage); } @Override public void setParent(Item item, int damage) { super.setParent(item, damage); Data.addEnergy(newItemStack()); Data.addUtilities(newItemStack()); } public void draw(boolean[] presence, boolean[] charged) { if (main != null) main.draw(); int idx = 0; for (Obj3DPart led : leds) { if (presence != null && presence[idx]) { UtilsClient.ledOnOffColor(charged[idx]); UtilsClient.drawLight(led); } else { GL11.glColor3f(0.2f, 0.2f, 0.2f); led.draw(); } idx++; } } @Override public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item, ItemRendererHelper helper) { return type != ItemRenderType.INVENTORY; } @Override public boolean handleRenderType(ItemStack item, ItemRenderType type) { return true; } //boolean[] defaultCharged = new boolean[]{true, true, true, true}; @Override public void renderItem(ItemRenderType type, ItemStack item, Object... data) { if (type == ItemRenderType.INVENTORY) { super.renderItem(type, item, data); } draw(null, null); } public void applyTo(NbtElectricalLoad powerLoad) { cable.applyTo(powerLoad); } public void setRp(Resistor powerload, boolean powerOn) { if (!powerOn) powerload.highImpedance(); else powerload.setR(Rp); } @Override public void addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean par4) { super.addInformation(itemStack, entityPlayer, list, par4); Collections.addAll(list, tr("Can be used to recharge\nelectrical items like:\nFlash Light, X-Ray scanner\nand Portable Battery ...").split("\\\n")); list.add(tr("Nominal power: %1$W", nominalPower)); //list.add(Utils.plotPower("Maximal power", nominalPower * 3)); } @Override public LRDU getFrontFromPlace(Direction side, EntityPlayer player) { return super.getFrontFromPlace(side, player).inverse(); } }