/**
* Copyright (c) Lambda Innovation, 2013-2015
* 本作品版权由Lambda Innovation所有。
* http://www.li-dev.cn/
*
* This project is open-source, and it is distributed under
* the terms of GNU General Public License. You can modify
* and distribute freely as long as you follow the license.
* 本项目是一个开源项目,且遵循GNU通用公共授权协议。
* 在遵照该协议的情况下,您可以自由传播和修改。
* http://www.gnu.org/licenses/gpl.html
*/
package cn.liutils.template.client.render.entity;
import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.entity.Entity;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL12;
import cn.liutils.util.client.RenderUtils;
import cn.liutils.util.client.ViewOptimize;
import cn.liutils.util.client.ViewOptimize.IAssociatePlayer;
import cn.liutils.util.helper.Color;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
/**
* A EntityRender that renders an entity as a single icon.
*/
@SideOnly(Side.CLIENT)
public class RenderIcon extends Render {
protected ResourceLocation icon;
protected float size = 0.5F;
protected boolean hasLight = false;
public final Color color = Color.WHITE();
protected float minTolerateAlpha = 0.0F; //The minium filter value of alpha test. Used in transparent texture adjustments.
public RenderIcon(ResourceLocation ic) {
icon = ic;
}
public RenderIcon setSize(float s) {
size = s;
return this;
}
public RenderIcon setHasLight(boolean b) {
hasLight = b;
return this;
}
@Override
public void doRender(Entity par1Entity, double par2, double par4,
double par6, float par8, float par9) {
GL11.glEnable(GL11.GL_BLEND);
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glDisable(GL11.GL_CULL_FACE);
if(!hasLight)
GL11.glDisable(GL11.GL_LIGHTING);
//GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL11.glAlphaFunc(GL11.GL_GREATER, minTolerateAlpha);
GL11.glPushMatrix(); {
GL11.glTranslatef((float) par2, (float) par4, (float) par6);
GL11.glScalef(size, size, size);
postTranslate(par1Entity);
if(icon != null) RenderUtils.loadTexture(icon);
Tessellator t = Tessellator.instance;
this.func_77026_a(par1Entity, t);
} GL11.glPopMatrix();
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
GL11.glEnable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_CULL_FACE);
}
protected void postTranslate(Entity ent) {}
protected void firstTranslate(Entity ent) {}
private void func_77026_a(Entity e, Tessellator tessllator) {
float f4 = 1.0F;
float f5 = 0.5F;
float f6 = 0.25F;
GL11.glRotatef(180F - this.renderManager.playerViewY, 0.0F, 1.0F, 0.0F);
GL11.glRotatef(-this.renderManager.playerViewX, 1.0F, 0.0F, 0.0F);
if(!hasLight)
OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240f, 240f);
firstTranslate(e);
color.bind();
tessllator.startDrawingQuads();
if(!hasLight)
tessllator.setBrightness(15728880);
if(e instanceof IAssociatePlayer) {
ViewOptimize.fix((IAssociatePlayer) e);
}
tessllator.addVertexWithUV(0.0F - f5, 0.0F - f6, 0.0D, 0, 1);
tessllator.addVertexWithUV(f4 - f5, 0.0F - f6, 0.0D, 1, 1);
tessllator.addVertexWithUV(f4 - f5, f4 - f6, 0.0D, 1, 0);
tessllator.addVertexWithUV(0.0F - f5, f4 - f6, 0.0D, 0, 0);
tessllator.draw();
}
@Override
protected ResourceLocation getEntityTexture(Entity entity) {
return icon;
}
}