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.client.model.ModelCreeper; 007 import net.minecraft.entity.EntityLiving; 008 import net.minecraft.entity.monster.EntityCreeper; 009 import net.minecraft.util.MathHelper; 010 import org.lwjgl.opengl.GL11; 011 012 @SideOnly(Side.CLIENT) 013 public class RenderCreeper extends RenderLiving 014 { 015 /** The creeper model. */ 016 private ModelBase creeperModel = new ModelCreeper(2.0F); 017 018 public RenderCreeper() 019 { 020 super(new ModelCreeper(), 0.5F); 021 } 022 023 /** 024 * Updates creeper scale in prerender callback 025 */ 026 protected void updateCreeperScale(EntityCreeper par1EntityCreeper, float par2) 027 { 028 float var4 = par1EntityCreeper.getCreeperFlashIntensity(par2); 029 float var5 = 1.0F + MathHelper.sin(var4 * 100.0F) * var4 * 0.01F; 030 031 if (var4 < 0.0F) 032 { 033 var4 = 0.0F; 034 } 035 036 if (var4 > 1.0F) 037 { 038 var4 = 1.0F; 039 } 040 041 var4 *= var4; 042 var4 *= var4; 043 float var6 = (1.0F + var4 * 0.4F) * var5; 044 float var7 = (1.0F + var4 * 0.1F) / var5; 045 GL11.glScalef(var6, var7, var6); 046 } 047 048 /** 049 * Updates color multiplier based on creeper state called by getColorMultiplier 050 */ 051 protected int updateCreeperColorMultiplier(EntityCreeper par1EntityCreeper, float par2, float par3) 052 { 053 float var5 = par1EntityCreeper.getCreeperFlashIntensity(par3); 054 055 if ((int)(var5 * 10.0F) % 2 == 0) 056 { 057 return 0; 058 } 059 else 060 { 061 int var6 = (int)(var5 * 0.2F * 255.0F); 062 063 if (var6 < 0) 064 { 065 var6 = 0; 066 } 067 068 if (var6 > 255) 069 { 070 var6 = 255; 071 } 072 073 short var7 = 255; 074 short var8 = 255; 075 short var9 = 255; 076 return var6 << 24 | var7 << 16 | var8 << 8 | var9; 077 } 078 } 079 080 /** 081 * A method used to render a creeper's powered form as a pass model. 082 */ 083 protected int renderCreeperPassModel(EntityCreeper par1EntityCreeper, int par2, float par3) 084 { 085 if (par1EntityCreeper.getPowered()) 086 { 087 if (par1EntityCreeper.getHasActivePotion()) 088 { 089 GL11.glDepthMask(false); 090 } 091 else 092 { 093 GL11.glDepthMask(true); 094 } 095 096 if (par2 == 1) 097 { 098 float var4 = (float)par1EntityCreeper.ticksExisted + par3; 099 this.loadTexture("/armor/power.png"); 100 GL11.glMatrixMode(GL11.GL_TEXTURE); 101 GL11.glLoadIdentity(); 102 float var5 = var4 * 0.01F; 103 float var6 = var4 * 0.01F; 104 GL11.glTranslatef(var5, var6, 0.0F); 105 this.setRenderPassModel(this.creeperModel); 106 GL11.glMatrixMode(GL11.GL_MODELVIEW); 107 GL11.glEnable(GL11.GL_BLEND); 108 float var7 = 0.5F; 109 GL11.glColor4f(var7, var7, var7, 1.0F); 110 GL11.glDisable(GL11.GL_LIGHTING); 111 GL11.glBlendFunc(GL11.GL_ONE, GL11.GL_ONE); 112 return 1; 113 } 114 115 if (par2 == 2) 116 { 117 GL11.glMatrixMode(GL11.GL_TEXTURE); 118 GL11.glLoadIdentity(); 119 GL11.glMatrixMode(GL11.GL_MODELVIEW); 120 GL11.glEnable(GL11.GL_LIGHTING); 121 GL11.glDisable(GL11.GL_BLEND); 122 } 123 } 124 125 return -1; 126 } 127 128 protected int func_77061_b(EntityCreeper par1EntityCreeper, int par2, float par3) 129 { 130 return -1; 131 } 132 133 /** 134 * Allows the render to do any OpenGL state modifications necessary before the model is rendered. Args: 135 * entityLiving, partialTickTime 136 */ 137 protected void preRenderCallback(EntityLiving par1EntityLiving, float par2) 138 { 139 this.updateCreeperScale((EntityCreeper)par1EntityLiving, par2); 140 } 141 142 /** 143 * Returns an ARGB int color back. Args: entityLiving, lightBrightness, partialTickTime 144 */ 145 protected int getColorMultiplier(EntityLiving par1EntityLiving, float par2, float par3) 146 { 147 return this.updateCreeperColorMultiplier((EntityCreeper)par1EntityLiving, par2, par3); 148 } 149 150 /** 151 * Queries whether should render the specified pass or not. 152 */ 153 protected int shouldRenderPass(EntityLiving par1EntityLiving, int par2, float par3) 154 { 155 return this.renderCreeperPassModel((EntityCreeper)par1EntityLiving, par2, par3); 156 } 157 158 protected int inheritRenderPass(EntityLiving par1EntityLiving, int par2, float par3) 159 { 160 return this.func_77061_b((EntityCreeper)par1EntityLiving, par2, par3); 161 } 162 }