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