001 package net.minecraft.client.renderer.entity;
002
003 import cpw.mods.fml.relauncher.Side;
004 import cpw.mods.fml.relauncher.SideOnly;
005 import net.minecraft.client.model.ModelBase;
006 import net.minecraft.entity.EntityLiving;
007 import net.minecraft.entity.monster.EntitySlime;
008 import org.lwjgl.opengl.GL11;
009
010 @SideOnly(Side.CLIENT)
011 public class RenderSlime extends RenderLiving
012 {
013 private ModelBase scaleAmount;
014
015 public RenderSlime(ModelBase par1ModelBase, ModelBase par2ModelBase, float par3)
016 {
017 super(par1ModelBase, par3);
018 this.scaleAmount = par2ModelBase;
019 }
020
021 /**
022 * Determines whether Slime Render should pass or not.
023 */
024 protected int shouldSlimeRenderPass(EntitySlime par1EntitySlime, int par2, float par3)
025 {
026 if (par1EntitySlime.getHasActivePotion())
027 {
028 return 0;
029 }
030 else if (par2 == 0)
031 {
032 this.setRenderPassModel(this.scaleAmount);
033 GL11.glEnable(GL11.GL_NORMALIZE);
034 GL11.glEnable(GL11.GL_BLEND);
035 GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
036 return 1;
037 }
038 else
039 {
040 if (par2 == 1)
041 {
042 GL11.glDisable(GL11.GL_BLEND);
043 GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
044 }
045
046 return -1;
047 }
048 }
049
050 /**
051 * sets the scale for the slime based on getSlimeSize in EntitySlime
052 */
053 protected void scaleSlime(EntitySlime par1EntitySlime, float par2)
054 {
055 float var3 = (float)par1EntitySlime.getSlimeSize();
056 float var4 = (par1EntitySlime.field_70812_c + (par1EntitySlime.field_70811_b - par1EntitySlime.field_70812_c) * par2) / (var3 * 0.5F + 1.0F);
057 float var5 = 1.0F / (var4 + 1.0F);
058 GL11.glScalef(var5 * var3, 1.0F / var5 * var3, var5 * var3);
059 }
060
061 /**
062 * Allows the render to do any OpenGL state modifications necessary before the model is rendered. Args:
063 * entityLiving, partialTickTime
064 */
065 protected void preRenderCallback(EntityLiving par1EntityLiving, float par2)
066 {
067 this.scaleSlime((EntitySlime)par1EntityLiving, par2);
068 }
069
070 /**
071 * Queries whether should render the specified pass or not.
072 */
073 protected int shouldRenderPass(EntityLiving par1EntityLiving, int par2, float par3)
074 {
075 return this.shouldSlimeRenderPass((EntitySlime)par1EntityLiving, par2, par3);
076 }
077 }