package zmaster587.advancedRocketry.client.render.multiblocks;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.client.model.AdvancedModelLoader;
import net.minecraftforge.client.model.IModelCustom;
import net.minecraftforge.common.util.ForgeDirection;
import org.lwjgl.opengl.GL11;
import zmaster587.advancedRocketry.api.AdvancedRocketryBlocks;
import zmaster587.advancedRocketry.util.Debugger;
import zmaster587.libVulpes.api.material.Material;
import zmaster587.libVulpes.api.material.MaterialRegistry;
import zmaster587.libVulpes.block.RotatableBlock;
import zmaster587.libVulpes.tile.multiblock.TileMultiblockMachine;
public class RendererRollingMachine extends TileEntitySpecialRenderer {
IModelCustom model = AdvancedModelLoader.loadModel(new ResourceLocation("advancedrocketry:models/rollingMachine.obj"));
ResourceLocation texture = new ResourceLocation("advancedrocketry:textures/models/rollingMachine.png");
ResourceLocation coilSide = new ResourceLocation("libvulpes:textures/blocks/coilSide.png");
static int i = MaterialRegistry.getMaterialFromName("Copper").getColor();
private static int bodyList;
public RendererRollingMachine() {
GL11.glNewList(bodyList = GL11.glGenLists(1), GL11.GL_COMPILE);
model.renderOnly("Hull");
GL11.glEndList();
}
@Override
public void renderTileEntityAt(TileEntity tile, double x,
double y, double z, float f) {
TileMultiblockMachine multiBlockTile = (TileMultiblockMachine)tile;
if(!multiBlockTile.canRender())
return;
GL11.glPushMatrix();
//Initial setup
int bright = tile.getWorldObj().getLightBrightnessForSkyBlocks(tile.xCoord, tile.yCoord + 1, tile.zCoord,0);
int brightX = bright % 65536;
int brightY = bright / 65536;
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, brightX, brightY);
//Rotate and move the model into position
GL11.glTranslated(x + .5f, y, z + 0.5f);
ForgeDirection front = RotatableBlock.getFront(tile.getBlockMetadata());
GL11.glRotatef((front.offsetX == 1 ? 180 : 0) + front.offsetZ*90f, 0, 1, 0);
GL11.glTranslated(-.5f, -1f, -0.5f);
bindTexture(coilSide);
GL11.glColor3f(((i >>> 16) & 0xFF)/255f, ((i >>> 8) & 0xFF)/255f, (i & 0xFF)/255f);
model.renderOnly("Coil");
GL11.glColor3f(1f,1f,1f);
ItemStack outputStack;
if(multiBlockTile.isRunning()) {
float progress = multiBlockTile.getProgress(0)/(float)multiBlockTile.getTotalProgress(0);
bindTexture(texture);
if(Debugger.renderList)
GL11.glCallList(bodyList);
else
model.renderOnly("Hull");
GL11.glPushMatrix();
GL11.glTranslatef(2.12f, 1.0f, 2.56f);
GL11.glRotatef(-progress*720, 1, 0, 0);
model.renderOnly("Roller1");
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glTranslatef(2.12f, 0.375f,2.18f);
GL11.glRotatef(progress*720, 1, 0, 0);
model.renderOnly("Roller2");
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glTranslatef(2.12f, 0.375f, 2.93f);
GL11.glRotatef(15 + progress*720, 1, 0, 0);
model.renderOnly("Roller2");
GL11.glPopMatrix();
int color;
//Check for rare bug when outputs is null, usually occurs if player opens machine within 1st tick
if(multiBlockTile.getOutputs() != null && (outputStack = multiBlockTile.getOutputs().get(0)) != null)
color = MaterialRegistry.getColorFromItemMaterial(outputStack);
else
color = 0;
//int color = MaterialRegistry.getMaterialFromItemStack(multiBlockTile.getOutputs().get(0)).getColor();
GL11.glColor3d((0xff & color >> 16)/256f, (0xff & color >> 8)/256f , (color & 0xff)/256f);
//Render the ingot
if(progress < 0.6f) {
GL11.glPushMatrix();
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glTranslatef(2.125f, 0.875f, 1.3125f + progress*2f);
model.renderOnly("Ingot");
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glPopMatrix();
}
//Render the plate
if(progress > 0.5f) {
GL11.glPushMatrix();
GL11.glDisable(GL11.GL_TEXTURE_2D);
GL11.glTranslatef(2.125f, 0.875f, 1.7125f + progress*2f);
model.renderOnly("Plate");
GL11.glEnable(GL11.GL_TEXTURE_2D);
GL11.glPopMatrix();
}
GL11.glColor3f(1f,1f,1f);
}
else {
bindTexture(texture);
if(Debugger.renderList)
GL11.glCallList(bodyList);
else
model.renderOnly("Hull");
GL11.glPushMatrix();
GL11.glTranslatef(2.12f, 1.0f, 2.56f);
model.renderOnly("Roller1");
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glTranslatef(2.12f, 0.375f,2.18f);
model.renderOnly("Roller2");
GL11.glPopMatrix();
GL11.glPushMatrix();
GL11.glTranslatef(2.12f, 0.375f, 2.93f);
GL11.glRotatef(15, 1, 0, 0);
model.renderOnly("Roller2");
GL11.glPopMatrix();
}
GL11.glPopMatrix();
}
}