package crazypants.enderio.machine.solar;
import java.util.EnumSet;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.IBlockAccess;
import net.minecraftforge.common.util.ForgeDirection;
import org.lwjgl.opengl.GL11;
import com.enderio.core.client.render.BoundingBox;
import com.enderio.core.client.render.ConnectedTextureRenderer;
import com.enderio.core.client.render.CubeRenderer;
import com.enderio.core.client.render.CustomCubeRenderer;
import com.enderio.core.client.render.IconUtil;
import com.enderio.core.client.render.RenderUtil;
import cpw.mods.fml.client.registry.ISimpleBlockRenderingHandler;
import crazypants.enderio.EnderIO;
public class SolarPanelRenderer implements ISimpleBlockRenderingHandler {
private ConnectedTextureRenderer ctr;
public SolarPanelRenderer() {
ctr = new ConnectedTextureRenderer();
ctr.setMatchMeta(true);
ctr.setSidesToRender(EnumSet.of(ForgeDirection.UP));
}
@Override
public void renderInventoryBlock(Block block, int metadata, int modelId, RenderBlocks renderer) {
RenderUtil.bindBlockTexture();
Tessellator tes = Tessellator.instance;
float offset = -0.5f;
tes.addTranslation(offset, 0, offset);
tes.startDrawingQuads();
CubeRenderer.render(new BoundingBox(EnderIO.blockSolarPanel), RenderUtil.getBlockTextures(EnderIO.blockSolarPanel, metadata), false);
tes.draw();
GL11.glEnable(GL11.GL_POLYGON_OFFSET_FILL);
GL11.glPolygonOffset(-1.0f, -1.0f);
tes.startDrawingQuads();
tes.setColorRGBA_F(1, 1, 1, 1);
renderBorder(null, 0, 0, 0, metadata);
tes.draw();
tes.addTranslation(-offset, 0, -offset);
GL11.glDisable(GL11.GL_POLYGON_OFFSET_FILL);
}
@Override
public boolean renderWorldBlock(IBlockAccess world, int x, int y, int z, Block block, int modelId, RenderBlocks renderer) {
renderer.renderStandardBlock(block, x, y, z);
Tessellator.instance.addTranslation(0, 0.0001f, 0);
int meta = world.getBlockMetadata(x, y, z);
meta = MathHelper.clamp_int(meta, 0, 1);
ctr.setEdgeTexture(EnderIO.blockSolarPanel.getBorderIcon(0, meta));
CustomCubeRenderer.instance.setOverrideTexture(IconUtil.blankTexture);
if(!renderer.hasOverrideBlockTexture()) {
CustomCubeRenderer.instance.renderBlock(world, block, x, y, z, ctr);
} else {
CustomCubeRenderer.instance.renderBlock(world, block, x, y, z);
}
CustomCubeRenderer.instance.setOverrideTexture(null);
Tessellator.instance.addTranslation(0, -0.0001f, 0);
return true;
}
@Override
public boolean shouldRender3DInInventory(int modelId) {
return true;
}
private void renderBorder(IBlockAccess blockAccess, int x, int y, int z, int meta) {
IIcon texture = EnderIO.blockSolarPanel.getBorderIcon(0, meta);
RenderUtil.renderConnectedTextureFace(blockAccess, EnderIO.blockSolarPanel, x, y, z, ForgeDirection.UP, texture, blockAccess == null, false, false);
}
@Override
public int getRenderId() {
return BlockSolarPanel.renderId;
}
}