package mods.eln.sixnode.energymeter;
import mods.eln.misc.Obj3D;
import mods.eln.misc.Obj3D.Obj3DPart;
import mods.eln.misc.Utils;
import mods.eln.misc.VoltageLevelColor;
import mods.eln.node.six.SixNodeDescriptor;
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.List;
public class EnergyMeterDescriptor extends SixNodeDescriptor {
private Obj3D obj;
public Obj3DPart base, powerDisk, energySignWheel, timeUnitWheel, energyUnitWheel;
public Obj3DPart[] energyNumberWheel, timeNumberWheel;
public float[] pinDistance;
float alphaOff, alphaOn, speed;
public EnergyMeterDescriptor(String name, Obj3D obj, int energyWheelCount, int timeWheelCount) {
super(name, EnergyMeterElement.class, EnergyMeterRender.class);
this.obj = obj;
if (obj != null) {
base = obj.getPart("Base");
powerDisk = obj.getPart("PowerDisk");
energySignWheel = obj.getPart("EnergySignWheel");
timeUnitWheel = obj.getPart("TimeUnitWheel");
energyUnitWheel = obj.getPart("EnergyUnitWheel");
energyNumberWheel = new Obj3DPart[energyWheelCount];
for (int idx = 0; idx < energyNumberWheel.length; idx++) {
energyNumberWheel[idx] = obj.getPart("EnergyNumberWheel" + idx);
}
timeNumberWheel = new Obj3DPart[timeWheelCount];
for (int idx = 0; idx < timeNumberWheel.length; idx++) {
timeNumberWheel[idx] = obj.getPart("TimeNumberWheel" + idx);
}
}
pinDistance = Utils.getSixNodePinDistance(base);
voltageLevelColor = VoltageLevelColor.Neutral;
}
@Override
public void setParent(Item item, int damage) {
super.setParent(item, damage);
Data.addWiring(newItemStack());
}
@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);
/*
GL11.glRotatef(45, 0, 0, 1);
GL11.glRotatef(90, 1, 0, 0);
GL11.glRotatef(30, 0, 0, 1);
float scal = 2.5f;
GL11.glScalef(scal, scal, scal);
draw(13896, 1511, 1, 0, false);*/
} else {
draw(13896, 1511, 1, 0, true);
}
}
public void draw(double energy, double time, int energyUnit, int timeUnit, boolean drawAll) {
// UtilsClient.disableCulling();
base.draw();
powerDisk.draw(-(float) energy, 0f, 1f, 0f);
{// render energy
float ox = 0.20859f, oy = 0.15625f, oz = 0;
double delta = 0;
boolean propagate = true;
double oldRot = 0;
if (drawAll) {
{
double rot;
if (energy > 0.5)
rot = 0;
else if (energy < -0.5)
rot = 1;
else
rot = 0.5 - energy;
rot *= 36;
GL11.glPushMatrix();
GL11.glTranslatef(ox, oy, oz);
GL11.glRotatef((float) rot, 0f, 0f, 1f);
GL11.glTranslatef(-ox, -oy, -oz);
energySignWheel.draw();
GL11.glPopMatrix();
}
if (energyUnitWheel != null) {
double rot = energyUnit * 36;
GL11.glPushMatrix();
GL11.glTranslatef(ox, oy, oz);
GL11.glRotatef((float) rot, 0f, 0f, 1f);
GL11.glTranslatef(-ox, -oy, -oz);
energyUnitWheel.draw();
GL11.glPopMatrix();
}
energy = Math.max(0.0, Math.abs(energy));
if (energy < 5) propagate = false;
for (int idx = 0; idx < energyNumberWheel.length; idx++) {
double rot = ((energy) % 10) + 0.0;
rot += 0.00;
if (idx == 1) {
delta = ((rot) % 1) * 2 - 1;
delta *= delta * delta;
delta *= 0.5;
}
if (idx != 0) {
if (propagate) {
if (rot < 9.5 && rot > 0.5) {
propagate = false;
}
rot = (int) (rot) + delta;
} else
rot = (int) (rot);
}
oldRot = rot;
rot *= 36;
GL11.glPushMatrix();
GL11.glTranslatef(ox, oy, oz);
GL11.glRotatef((float) rot, 0f, 0f, 1f);
GL11.glTranslatef(-ox, -oy, -oz);
energyNumberWheel[idx].draw();
GL11.glPopMatrix();
energy /= 10.0;
}
}
}
if (energyNumberWheel.length != 0) { // Render Times
float ox = 0.20859f, oy = 0.03125f, oz = 0;
double delta = 0;
boolean propagate = true;
double oldRot = 0;
if (drawAll) {
if (timeUnitWheel != null) {
double rot = timeUnit * 36;
GL11.glPushMatrix();
GL11.glTranslatef(ox, oy, oz);
GL11.glRotatef((float) rot, 0f, 0f, 1f);
GL11.glTranslatef(-ox, -oy, -oz);
timeUnitWheel.draw();
GL11.glPopMatrix();
}
time = Math.max(0.0, Math.abs(time));
if (time < 5) propagate = false;
for (int idx = 0; idx < timeNumberWheel.length; idx++) {
double rot = ((time) % 10) + 0.0;
rot += 0.00;
if (idx == 1) {
delta = ((rot) % 1) * 2 - 1;
delta *= delta * delta;
delta *= delta * delta;
delta *= delta * delta;
delta *= 0.5;
}
if (idx != 0) {
if (propagate) {
if (rot < 9.5 && rot > 0.5) {
propagate = false;
}
rot = (int) (rot) + delta;
} else
rot = (int) (rot);
}
oldRot = rot;
rot *= 36;
GL11.glPushMatrix();
GL11.glTranslatef(ox, oy, oz);
GL11.glRotatef((float) rot, 0f, 0f, 1f);
GL11.glTranslatef(-ox, -oy, -oz);
timeNumberWheel[idx].draw();
GL11.glPopMatrix();
time /= 10.0;
}
}
}
// UtilsClient.enableCulling();
}
@Override
public void addInformation(ItemStack itemStack, EntityPlayer entityPlayer, List list, boolean par4) {
super.addInformation(itemStack, entityPlayer, list, par4);
}
}