package mekanism.generators.client.render;
import mekanism.common.Mekanism;
import mekanism.common.util.MekanismUtils;
import mekanism.common.util.MekanismUtils.ResourceType;
import mekanism.generators.client.model.ModelTurbine;
import mekanism.generators.common.content.turbine.SynchronizedTurbineData;
import mekanism.generators.common.tile.turbine.TileEntityTurbineRotor;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import org.lwjgl.opengl.GL11;
@SideOnly(Side.CLIENT)
public class RenderTurbineRotor extends TileEntitySpecialRenderer
{
public static boolean internalRender = false;
private ModelTurbine model = new ModelTurbine();
private static final float BASE_SPEED = 512F;
@Override
public void renderTileEntityAt(TileEntity tileEntity, double x, double y, double z, float partialTick, int destroyStage)
{
renderAModelAt((TileEntityTurbineRotor)tileEntity, x, y, z, partialTick);
}
private void renderAModelAt(TileEntityTurbineRotor tileEntity, double x, double y, double z, float partialTick)
{
if(tileEntity.multiblockUUID != null && !internalRender)
{
return;
}
GlStateManager.pushMatrix();
bindTexture(MekanismUtils.getResource(ResourceType.RENDER, "Turbine.png"));
int baseIndex = tileEntity.clientIndex*2;
float rotateSpeed = 0.0F;
if(tileEntity.multiblockUUID != null && SynchronizedTurbineData.clientRotationMap.containsKey(tileEntity.multiblockUUID))
{
rotateSpeed = SynchronizedTurbineData.clientRotationMap.get(tileEntity.multiblockUUID);
}
if(!Mekanism.proxy.isPaused())
{
tileEntity.rotationLower = (tileEntity.rotationLower + rotateSpeed*BASE_SPEED*(1F/(float)(baseIndex+1))) % 360;
tileEntity.rotationUpper = (tileEntity.rotationUpper + rotateSpeed*BASE_SPEED*(1F/(float)(baseIndex+2))) % 360;
}
if(tileEntity.getHousedBlades() > 0)
{
GlStateManager.pushMatrix();
GL11.glTranslated(x + 0.5, y - 1, z + 0.5);
GlStateManager.rotate(tileEntity.rotationLower, 0.0F, 1.0F, 0.0F);
model.render(0.0625F, baseIndex);
GlStateManager.popMatrix();
}
if(tileEntity.getHousedBlades() == 2)
{
GlStateManager.pushMatrix();
GL11.glTranslated(x + 0.5, y - 0.5, z + 0.5);
GlStateManager.rotate(tileEntity.rotationUpper, 0.0F, 1.0F, 0.0F);
model.render(0.0625F, baseIndex+1);
GlStateManager.popMatrix();
}
GlStateManager.popMatrix();
}
}