package openblocks.client.model;
import cpw.mods.fml.common.eventhandler.SubscribeEvent;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.client.renderer.ItemRenderer;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.init.Items;
import net.minecraft.util.IIcon;
import net.minecraftforge.client.event.TextureStitchEvent;
import net.minecraftforge.common.MinecraftForge;
import openmods.renderer.DisplayListWrapper;
import openmods.utils.TextureUtils;
import org.lwjgl.opengl.GL11;
public class ModelCartographer extends ModelBase {
private static final float SCALE = 1.0f / 16.0f;
private final ModelRenderer body;
private final ModelRenderer base;
private final DisplayListWrapper eyeList = new DisplayListWrapper() {
@Override
public void compile() {
GL11.glColor3d(1, 1, 1);
GL11.glScalef(SCALE * 3, SCALE * 3, SCALE);
final Tessellator tes = new Tessellator();
tes.setTranslation(-0.5, -0.5, 0);
final IIcon icon = Items.ender_eye.getIconFromDamage(0);
ItemRenderer.renderItemIn2D(
tes,
icon.getInterpolatedU(15), icon.getInterpolatedV(2),
icon.getInterpolatedU(2), icon.getInterpolatedV(15),
13, 13,
0.5f);
}
};
@SubscribeEvent
public void onTextureChange(TextureStitchEvent evt) {
if (evt.map.getTextureType() == TextureUtils.TEXTURE_MAP_ITEMS) eyeList.reset();
}
public ModelCartographer() {
textureWidth = 32;
textureHeight = 32;
body = new ModelRenderer(this, 0, 0);
body.addBox(-2.5f, -1.5f, -2.5f, 5, 2, 5);
base = new ModelRenderer(this);
body.addChild(base);
base.setTextureOffset(0, 7);
base.addBox(-1.5f, 0.5f, -1.5f, 3, 1, 3);
base.setTextureOffset(0, 11);
base.addBox(-0.5f, 0.5f, -2.5f, 1, 4, 1);
base.setTextureOffset(4, 11);
base.addBox(-0.5f, 0.5f, 1.5f, 1, 4, 1);
MinecraftForge.EVENT_BUS.register(this);
}
public void renderEye(float baseRotation, float eyeRotation) {
GL11.glPushMatrix();
GL11.glTranslatef(0, 0.25f, 0);
GL11.glRotated(Math.toDegrees(baseRotation) + 90, 0, 1, 0);
GL11.glRotated(Math.toDegrees(eyeRotation), 1, 0, 0);
eyeList.render();
GL11.glPopMatrix();
}
public void renderBase(float baseRotation) {
base.rotateAngleY = baseRotation;
body.render(SCALE);
}
}