package blusunrize.immersiveengineering.client.models;
import blusunrize.immersiveengineering.api.shader.IShaderItem;
import blusunrize.immersiveengineering.api.shader.ShaderCase;
import blusunrize.immersiveengineering.api.shader.ShaderCase.ShaderLayer;
import blusunrize.immersiveengineering.api.shader.ShaderCaseMinecart;
import blusunrize.immersiveengineering.client.ClientUtils;
import net.minecraft.client.model.ModelBox;
import net.minecraft.client.model.ModelMinecart;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemStack;
import org.lwjgl.opengl.GL11;
import java.util.ArrayList;
import java.util.HashMap;
public class ModelShaderMinecart extends ModelMinecart
{
public static HashMap<Integer, ItemStack> shadedCarts = new HashMap<Integer, ItemStack>();
public static boolean rendersReplaced = false;
public ModelRenderer[] sideModelsMirrored = new ModelRenderer[7];
// public HashMap<IIcon,ModelShaderMinecart> remappedModels = new HashMap();
public ModelShaderMinecart(ModelMinecart model)
{
super();
this.sideModels = ClientUtils.copyModelRenderers(model, model.sideModels);
this.sideModelsMirrored = ClientUtils.copyModelRenderers(model, model.sideModels);
sideModelsMirrored[4].mirror = true;
ArrayList<ModelBox> newCubes = new ArrayList<ModelBox>();
for(ModelBox cube : sideModelsMirrored[4].cubeList)
newCubes.add(new ModelBox(sideModelsMirrored[4], 0,0, cube.posX1,cube.posY1,cube.posZ1, (int)(cube.posX2-cube.posX1),(int)(cube.posY2-cube.posY1),(int)(cube.posZ2-cube.posZ1), 0));
sideModelsMirrored[4].cubeList = newCubes;
}
@Override
public void render(Entity entity, float f0, float f1, float f2, float f3, float f4, float f5)
{
ShaderCase sCase = null;
ItemStack shader = null;
if(shadedCarts.containsKey(entity.getEntityId()))
{
shader = shadedCarts.get(entity.getEntityId());
if(shader!=null && shader.getItem() instanceof IShaderItem)
sCase = ((IShaderItem)shader.getItem()).getShaderCase(shader,null,"immersiveengineering:minecart");
}
if(sCase!=null)
{
GL11.glEnable(GL11.GL_BLEND);
OpenGlHelper.glBlendFunc(770, 771, 0, 1);
sideModels[5].rotationPointY = 4.0F - f2;
sideModelsMirrored[5].rotationPointY = 4.0F - f2;
for(int part=0;part<sideModels.length-1;part++)
if(sideModels[part]!=null)
{
float scale = 1;
ShaderLayer[] layers = sCase.getLayers();
//identify part 1+2, they shouldn'T render with additional?!
for(int pass=0; pass<layers.length; pass++)
if(sCase.renderModelPartForPass(shader, null, ""+part, pass))
{
int col = sCase.getARGBColourModifier(shader, null, ""+part, pass);
boolean upScale = pass!=layers.length-2;
GL11.glScalef(scale,scale,scale);
GL11.glColor4f((col>>16&255)/255f,(col>>8&255)/255f,(col&255)/255f,(col>>24&255)/255f);
// if(pass==maxPasses-1)
// ClientUtils.bindTexture("immersiveengineering:textures/models/shaders/minecart_uncoloured.png");
// else if(pass==maxPasses-2 && ((ShaderCaseMinecart)sCase).additionalTexture!=null)
// ClientUtils.bindTexture(sCase.getBaseTexturePath()+((ShaderCaseMinecart)sCase).additionalTexture+".png");
// else if(pass==0)
// ClientUtils.bindTexture("immersiveengineering:textures/models/shaders/minecart_0.png");
// else
// {
// ClientUtils.bindTexture(sCase.getBaseTexturePath()+"1_"+sCase.getOverlayType()+".png");
// upScale = false;
// }
ClientUtils.mc().getTextureManager().bindTexture(sCase.getReplacementSprite(shader, null, ""+part, pass));
sCase.modifyRender(shader, null, ""+part, pass, true, false);
if(((ShaderCaseMinecart)sCase).mirrorSideForPass[pass])
sideModelsMirrored[part].render(f5);
else
sideModels[part].render(f5);
sCase.modifyRender(shader, null, ""+part, pass, false, false);
GL11.glColor4f(1,1,1,1);
GL11.glScalef(1/scale,1/scale,1/scale);
if(upScale)
scale += .001f;
}
}
GL11.glDisable(GL11.GL_BLEND);
}
else
super.render(entity, f0, f1, f2, f3, f4, f5);
}
// ModelShaderMinecart getRemappedModel(IIcon icon)
// {
// if(remappedModels.containsKey(icon))
// return remappedModels.get(icon);
//
// ModelShaderMinecart modelRemapped = new ModelShaderMinecart(this);
// int ox = MathHelper.floor_float(icon.getMinU() * ClientEventHandler.itemSheetWidth);
// int oy = MathHelper.floor_float(icon.getMinV() * ClientEventHandler.itemSheetHeight);
// modelRemapped.textureWidth = ClientEventHandler.itemSheetWidth;
// modelRemapped.textureHeight = ClientEventHandler.itemSheetHeight;
// for(ModelRenderer mr : modelRemapped.sideModels)
// if(mr!=null)
// mr.setTextureOffset(mr.textureOffsetX+ox, mr.textureOffsetX+oy);
// for(ModelRenderer mr : modelRemapped.sideModelsMirrored)
// if(mr!=null)
// mr.setTextureOffset(mr.textureOffsetX+ox, mr.textureOffsetX+oy);
// modelRemapped.sideModels = ClientUtils.copyModelRenderers(modelRemapped, modelRemapped.sideModels);
// modelRemapped.sideModelsMirrored = ClientUtils.copyModelRenderers(modelRemapped, modelRemapped.sideModelsMirrored);
// remappedModels.put(icon, modelRemapped);
// return modelRemapped;
// }
}