package mcjty.deepresonance.blocks.laser;
import mcjty.deepresonance.DeepResonance;
import mcjty.lib.gui.RenderHelper;
import mcjty.lib.varia.BlockTools;
import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
public class LaserRenderer extends TileEntitySpecialRenderer<LaserTileEntity> {
private static final ResourceLocation bluelaser = new ResourceLocation(DeepResonance.MODID, "textures/effects/blueLaserbeam.png");
private static final ResourceLocation redlaser = new ResourceLocation(DeepResonance.MODID, "textures/effects/redLaserbeam.png");
private static final ResourceLocation greenlaser = new ResourceLocation(DeepResonance.MODID, "textures/effects/greenLaserbeam.png");
private static final ResourceLocation yellowlaser = new ResourceLocation(DeepResonance.MODID, "textures/effects/yellowLaserbeam.png");
@Override
public void renderTileEntityAt(LaserTileEntity tileEntity, double x, double y, double z, float f, int breakState) {
Tessellator tessellator = Tessellator.getInstance();
int color = tileEntity.getColor();
if (color != 0) {
int meta = tileEntity.getBlockMetadata();
EnumFacing direction = BlockTools.getOrientationHoriz(meta);
float destX = tileEntity.getPos().getX() + 0.5f + direction.getFrontOffsetX()*2.5f;
float destY = tileEntity.getPos().getY() + 0.5f;
float destZ = tileEntity.getPos().getZ() + 0.5f + direction.getFrontOffsetZ()*2.5f;
GlStateManager.pushAttrib();
// GL11.glPushAttrib(GL11.GL_CURRENT_BIT | GL11.GL_DEPTH_BUFFER_BIT | GL11.GL_ENABLE_BIT | GL11.GL_LIGHTING_BIT | GL11.GL_TEXTURE_BIT);
tessellator.getBuffer().begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_TEX_LMAP_COLOR);
GlStateManager.enableBlend();
GlStateManager.blendFunc(GL11.GL_ONE, GL11.GL_ONE);
GlStateManager.enableDepth();
GlStateManager.depthMask(false);
GlStateManager.pushMatrix();
switch (color) {
case LaserTileEntity.COLOR_BLUE: this.bindTexture(bluelaser); break;
case LaserTileEntity.COLOR_RED: this.bindTexture(redlaser); break;
case LaserTileEntity.COLOR_GREEN: this.bindTexture(greenlaser); break;
case LaserTileEntity.COLOR_YELLOW: this.bindTexture(yellowlaser); break;
}
Minecraft mc = Minecraft.getMinecraft();
EntityPlayerSP p = mc.thePlayer;
double doubleX = p.lastTickPosX + (p.posX - p.lastTickPosX) * f;
double doubleY = p.lastTickPosY + (p.posY - p.lastTickPosY) * f;
double doubleZ = p.lastTickPosZ + (p.posZ - p.lastTickPosZ) * f;
GlStateManager.translate(-doubleX, -doubleY, -doubleZ);
RenderHelper.Vector start = new RenderHelper.Vector(tileEntity.getPos().getX() + .5f, tileEntity.getPos().getY() + .5f, tileEntity.getPos().getZ() + .5f);
RenderHelper.Vector end = new RenderHelper.Vector(destX, destY, destZ);
RenderHelper.Vector player = new RenderHelper.Vector((float) doubleX, (float) doubleY + p.getEyeHeight(), (float) doubleZ);
RenderHelper.drawBeam(start, end, player, .2f);
tessellator.draw();
GlStateManager.popMatrix();
GlStateManager.popAttrib();
}
}
}