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