/*
* Copyright (c) CovertJaguar, 2014 http://railcraft.info
*
* This code is the property of CovertJaguar
* and may only be used with explicit written
* permission unless otherwise specified on the
* license page at http://railcraft.info/wiki/info:license.
*/
package mods.railcraft.client.render.carts;
import mods.railcraft.api.carts.locomotive.LocomotiveModelRenderer;
import mods.railcraft.api.carts.locomotive.IRenderer;
import mods.railcraft.common.core.RailcraftConstants;
import mods.railcraft.common.plugins.forge.LocalizationPlugin;
import mods.railcraft.common.util.misc.MiscTools;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.item.EntityMinecart;
import net.minecraft.util.IIcon;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
/**
*
* @author CovertJaguar <http://www.railcraft.info/>
*/
public class LocomotiveRendererDefault extends LocomotiveModelRenderer {
protected final String modelTag;
private final ModelBase model;
private final ResourceLocation[] textures;
private final int[] color = new int[3];
protected final IIcon[] itemIcons = new IIcon[3];
private float emblemSize = 0.15F;
private float emblemOffsetX = 0.47F;
private float emblemOffsetY = -0.17F;
private float emblemOffsetZ = -0.515F;
public LocomotiveRendererDefault(String rendererTag, String modelTag, ModelBase model) {
this(rendererTag, modelTag, model, new ResourceLocation[]{
new ResourceLocation(RailcraftConstants.LOCOMOTIVE_TEXTURE_FOLDER + modelTag + ".primary.png"),
new ResourceLocation(RailcraftConstants.LOCOMOTIVE_TEXTURE_FOLDER + modelTag + ".secondary.png"),
new ResourceLocation(RailcraftConstants.LOCOMOTIVE_TEXTURE_FOLDER + modelTag + ".nocolor.png")});
}
public LocomotiveRendererDefault(String rendererTag, String modelTag, ModelBase model, ResourceLocation[] textures) {
super(rendererTag);
this.modelTag = modelTag;
this.model = model;
this.textures = textures;
color[2] = 0xFFFFFF;
setRenderItemIn3D(false);
}
public void setEmblemPosition(float size, float offsetX, float offsetY, float offsetZ) {
this.emblemSize = size;
this.emblemOffsetX = offsetX;
this.emblemOffsetY = offsetY;
this.emblemOffsetZ = offsetZ;
}
@Override
public String getDisplayName() {
return LocalizationPlugin.translate("railcraft." + modelTag + ".name");
}
@Override
public IIcon[] getItemIcons() {
return itemIcons;
}
@Override
public void registerItemIcons(IIconRegister iconRegister) {
String tag = "railcraft:locomotives/" + MiscTools.cleanTag(modelTag);
itemIcons[0] = iconRegister.registerIcon(tag + ".primary");
itemIcons[1] = iconRegister.registerIcon(tag + ".secondary");
itemIcons[2] = iconRegister.registerIcon(tag + ".nocolor");
}
@Override
public void renderLocomotive(IRenderer renderer, EntityMinecart cart, int primaryColor, int secondaryColor, ResourceLocation emblemTexture, float light, float time) {
GL11.glPushMatrix();
GL11.glPushAttrib(GL11.GL_ENABLE_BIT);
GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glScalef(-1F, -1F, 1.0F);
color[0] = primaryColor;
color[1] = secondaryColor;
for (int pass = 0; pass < textures.length; pass++) {
renderer.bindTex(textures[pass]);
int c = color[pass];
float dim = 1.0F;
float c1 = (float) (c >> 16 & 255) / 255.0F;
float c2 = (float) (c >> 8 & 255) / 255.0F;
float c3 = (float) (c & 255) / 255.0F;
GL11.glColor4f(c1 * dim, c2 * dim, c3 * dim, 1);
model.render(cart, 0.0F, 0.0F, -0.1F, 0.0F, 0.0F, 0.0625F);
}
GL11.glPopAttrib();
if (emblemTexture != null) {
renderer.bindTex(emblemTexture);
Tessellator tess = Tessellator.instance;
// float size = 0.22F;
// float offsetX = -0.25F;
// float offsetY = -0.25F;
// float offsetZ = -0.46F;
tess.startDrawingQuads();
tess.addVertexWithUV(emblemOffsetX - emblemSize, emblemOffsetY - emblemSize, emblemOffsetZ, 0, 0);
tess.addVertexWithUV(emblemOffsetX - emblemSize, emblemOffsetY + emblemSize, emblemOffsetZ, 0, 1);
tess.addVertexWithUV(emblemOffsetX + emblemSize, emblemOffsetY + emblemSize, emblemOffsetZ, 1, 1);
tess.addVertexWithUV(emblemOffsetX + emblemSize, emblemOffsetY + -emblemSize, emblemOffsetZ, 1, 0);
tess.addVertexWithUV(emblemOffsetX + emblemSize, emblemOffsetY + -emblemSize, -emblemOffsetZ, 0, 0);
tess.addVertexWithUV(emblemOffsetX + emblemSize, emblemOffsetY + emblemSize, -emblemOffsetZ, 0, 1);
tess.addVertexWithUV(emblemOffsetX - emblemSize, emblemOffsetY + emblemSize, -emblemOffsetZ, 1, 1);
tess.addVertexWithUV(emblemOffsetX - emblemSize, emblemOffsetY - emblemSize, -emblemOffsetZ, 1, 0);
tess.draw();
}
GL11.glPopMatrix();
}
}