/*******************************************************************************
* Copyright (c) 2013 Aroma1997.
* All rights reserved. This program and other files related to this program are
* licensed with a extended GNU General Public License v. 3
* License informations are at:
* https://github.com/Aroma1997/CompactWindmills/blob/master/license.txt
******************************************************************************/
package aroma1997.compactwindmills.rotors;
import aroma1997.compactwindmills.CompactWindmills;
import aroma1997.compactwindmills.TileEntityWindmill;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.world.World;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
/**
*
* @author Aroma1997
*
*/
@SideOnly(Side.CLIENT)
public class WindmillRenderer extends TileEntitySpecialRenderer {
private ModelRotor model;
public void renderBlockRotor(TileEntityWindmill tileEntity, World world, int posX, int posY,
int posZ, Block block) {
if (tileEntity.getRotor() == null) {
return;
}
model = new ModelRotor(tileEntity.getType().checkRadius);
Tessellator tessellator = Tessellator.instance;
float brightness = world.getBlockLightValue(posX, posY, posZ);
int skyBrightness = world.getLightBrightnessForSkyBlocks(posX, posY + 1,
posZ, 0);
int skyBrightness1 = skyBrightness % 65536;
int skyBrightness2 = skyBrightness / 65536;
tessellator.setColorOpaque_F(brightness, brightness, brightness);
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, skyBrightness1,
skyBrightness2);
short facing = tileEntity.getFacing();
GL11.glPushMatrix();
GL11.glTranslatef(0.5F, 0.5F, 0.5F);
if (facing == 2 || facing == 3 || facing == 4 || facing == 5) {
int dir = facing == 4 ? 0 : facing == 2 ? 1 : facing == 5 ? 2
: facing;
GL11.glRotatef(dir * - 90F, 0F, 1F, 0F);
}
else if (facing == 1) {
GL11.glRotatef(- 90.0F, 0.0F, 0.0F, 1.0F);
}
GL11.glRotatef(360 - System.currentTimeMillis() / 30 % 360, 1.0F, 0.0F, 0.0F);
GL11.glTranslatef(- 0.25F, 0.0F, 0.0F);
bindTexture(tileEntity.getRotor().getRenderTexture());
model.render(null, 0.0F, 0.0F, - 0.1F, 0.0F, 0.0F, 0.0625F);
GL11.glPopMatrix();
}
@Override
public void renderTileEntityAt(TileEntity tileEntity, double posX,
double posY, double posZ, float f) {
GL11.glPushMatrix();
GL11.glTranslatef((float) posX, (float) posY, (float) posZ);
TileEntityWindmill tileEntityWindmill = (TileEntityWindmill) tileEntity;
renderBlockRotor(tileEntityWindmill, tileEntity.getWorldObj(), tileEntity.xCoord,
tileEntity.yCoord, tileEntity.zCoord, CompactWindmills.windMill);
GL11.glPopMatrix();
}
}