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.ModelBat; 006 import net.minecraft.entity.Entity; 007 import net.minecraft.entity.EntityLiving; 008 import net.minecraft.entity.passive.EntityBat; 009 import net.minecraft.util.MathHelper; 010 import org.lwjgl.opengl.GL11; 011 012 @SideOnly(Side.CLIENT) 013 public class RenderBat extends RenderLiving 014 { 015 /** 016 * not actually sure this is size, is not used as of now, but the model would be recreated if the value changed and 017 * it seems a good match for a bats size 018 */ 019 private int renderedBatSize; 020 021 public RenderBat() 022 { 023 super(new ModelBat(), 0.25F); 024 this.renderedBatSize = ((ModelBat)this.mainModel).getBatSize(); 025 } 026 027 public void func_82443_a(EntityBat par1EntityBat, double par2, double par4, double par6, float par8, float par9) 028 { 029 int var10 = ((ModelBat)this.mainModel).getBatSize(); 030 031 if (var10 != this.renderedBatSize) 032 { 033 this.renderedBatSize = var10; 034 this.mainModel = new ModelBat(); 035 } 036 037 super.doRenderLiving(par1EntityBat, par2, par4, par6, par8, par9); 038 } 039 040 protected void func_82442_a(EntityBat par1EntityBat, float par2) 041 { 042 GL11.glScalef(0.35F, 0.35F, 0.35F); 043 } 044 045 protected void func_82445_a(EntityBat par1EntityBat, double par2, double par4, double par6) 046 { 047 super.renderLivingAt(par1EntityBat, par2, par4, par6); 048 } 049 050 protected void func_82444_a(EntityBat par1EntityBat, float par2, float par3, float par4) 051 { 052 if (!par1EntityBat.getIsBatHanging()) 053 { 054 GL11.glTranslatef(0.0F, MathHelper.cos(par2 * 0.3F) * 0.1F, 0.0F); 055 } 056 else 057 { 058 GL11.glTranslatef(0.0F, -0.1F, 0.0F); 059 } 060 061 super.rotateCorpse(par1EntityBat, par2, par3, par4); 062 } 063 064 /** 065 * Allows the render to do any OpenGL state modifications necessary before the model is rendered. Args: 066 * entityLiving, partialTickTime 067 */ 068 protected void preRenderCallback(EntityLiving par1EntityLiving, float par2) 069 { 070 this.func_82442_a((EntityBat)par1EntityLiving, par2); 071 } 072 073 protected void rotateCorpse(EntityLiving par1EntityLiving, float par2, float par3, float par4) 074 { 075 this.func_82444_a((EntityBat)par1EntityLiving, par2, par3, par4); 076 } 077 078 /** 079 * Sets a simple glTranslate on a LivingEntity. 080 */ 081 protected void renderLivingAt(EntityLiving par1EntityLiving, double par2, double par4, double par6) 082 { 083 this.func_82445_a((EntityBat)par1EntityLiving, par2, par4, par6); 084 } 085 086 public void doRenderLiving(EntityLiving par1EntityLiving, double par2, double par4, double par6, float par8, float par9) 087 { 088 this.func_82443_a((EntityBat)par1EntityLiving, par2, par4, par6, par8, par9); 089 } 090 091 /** 092 * Actually renders the given argument. This is a synthetic bridge method, always casting down its argument and then 093 * handing it off to a worker function which does the actual work. In all probabilty, the class Render is generic 094 * (Render<T extends Entity) and this method has signature public void doRender(T entity, double d, double d1, 095 * double d2, float f, float f1). But JAD is pre 1.5 so doesn't do that. 096 */ 097 public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9) 098 { 099 this.func_82443_a((EntityBat)par1Entity, par2, par4, par6, par8, par9); 100 } 101 }