/******************************************************************************* * AbyssalCraft * Copyright (c) 2012 - 2017 Shinoow. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Lesser Public License v3 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/lgpl-3.0.txt * * Contributors: * Shinoow - implementation ******************************************************************************/ package com.shinoow.abyssalcraft.client.render.entity; import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager.DestFactor; import net.minecraft.client.renderer.GlStateManager.SourceFactor; import net.minecraft.client.renderer.entity.RenderLiving; import net.minecraft.client.renderer.entity.RenderManager; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.MathHelper; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import org.lwjgl.opengl.GL11; import com.shinoow.abyssalcraft.client.model.entity.ModelDragonMinion; import com.shinoow.abyssalcraft.client.render.entity.layers.LayerSpectralDragonEyes; import com.shinoow.abyssalcraft.common.entity.EntityDragonMinion; @SideOnly(Side.CLIENT) public class RenderDragonMinion extends RenderLiving<EntityDragonMinion> { /** Scale of the model to use */ private float scale = 0.5F; private static final ResourceLocation field_110844_k = new ResourceLocation("abyssalcraft:textures/model/elite/dragonminion.png"); /** An instance of the dragon model in RenderDragon */ protected ModelDragonMinion modelDragon; public RenderDragonMinion(RenderManager manager) { super(manager, new ModelDragonMinion(0.0F), 0.3F); modelDragon = (ModelDragonMinion)mainModel; addLayer(new LayerSpectralDragonEyes(this)); } /** * Applies the scale to the transform matrix */ protected void preRenderScale(EntityDragonMinion par1EntityDragonMinion, float par2) { GlStateManager.scale(scale, scale, scale); } @Override protected void applyRotations(EntityDragonMinion par1EntityDragonMinion, float par2, float par3, float par4) { float f3 = (float)par1EntityDragonMinion.getMovementOffsets(7, par4)[0]; float f4 = (float)(par1EntityDragonMinion.getMovementOffsets(5, par4)[1] - par1EntityDragonMinion.getMovementOffsets(10, par4)[1]); GlStateManager.rotate(-f3, 0.0F, 1.0F, 0.0F); GlStateManager.rotate(f4 * 10.0F, 1.0F, 0.0F, 0.0F); GlStateManager.translate(0.0F, 0.0F, 1.0F); if (par1EntityDragonMinion.deathTime > 0) { float f5 = (par1EntityDragonMinion.deathTime + par4 - 1.0F) / 20.0F * 1.6F; f5 = MathHelper.sqrt(f5); if (f5 > 1.0F) f5 = 1.0F; GlStateManager.rotate(f5 * getDeathMaxRotation(par1EntityDragonMinion), 0.0F, 0.0F, 1.0F); } } @Override protected void renderModel(EntityDragonMinion par1EntityDragonMinion, float par2, float par3, float par4, float par5, float par6, float par7) { bindEntityTexture(par1EntityDragonMinion); GlStateManager.enableBlend(); GlStateManager.blendFunc(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA); mainModel.render(par1EntityDragonMinion, par2, par3, par4, par5, par6, par7); GlStateManager.disableBlend(); if (par1EntityDragonMinion.hurtTime > 0) { GL11.glDepthFunc(GL11.GL_EQUAL); GlStateManager.disableTexture2D(); GlStateManager.enableBlend(); GlStateManager.blendFunc(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA); GlStateManager.color(1.0F, 0.0F, 0.0F, 0.5F); mainModel.render(par1EntityDragonMinion, par2, par3, par4, par5, par6, par7); GlStateManager.enableTexture2D(); GlStateManager.disableBlend(); GL11.glDepthFunc(GL11.GL_LEQUAL); } } protected ResourceLocation func_110841_a(EntityDragonMinion par1EntityDragonMinion) { return field_110844_k; } /** * Allows the render to do any OpenGL state modifications necessary before the model is rendered. Args: * entityLiving, partialTickTime */ @Override protected void preRenderCallback(EntityDragonMinion par1EntityLivingBase, float par2) { preRenderScale(par1EntityLivingBase, par2); } @Override protected ResourceLocation getEntityTexture(EntityDragonMinion par1Entity) { return func_110841_a(par1Entity); } }