Package vazkii.botania.client.render.entity

Source Code of vazkii.botania.client.render.entity.RenderDoppleganger

/**
* This class was created by <Vazkii>. It's distributed as
* part of the Botania Mod. Get the Source Code in github:
* https://github.com/Vazkii/Botania
*
* Botania is Open Source and distributed under a
* Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License
* (http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_GB)
*
* File Created @ [Jul 12, 2014, 4:07:26 PM (GMT)]
*/
package vazkii.botania.client.render.entity;

import net.minecraft.client.Minecraft;
import net.minecraft.client.model.ModelBiped;
import net.minecraft.client.renderer.entity.RenderBiped;
import net.minecraft.entity.Entity;
import net.minecraft.entity.boss.BossStatus;
import net.minecraft.util.ResourceLocation;

import org.lwjgl.opengl.ARBShaderObjects;

import vazkii.botania.api.internal.ShaderCallback;
import vazkii.botania.client.core.handler.BossBarHandler;
import vazkii.botania.client.core.helper.ShaderHelper;
import vazkii.botania.common.entity.EntityDoppleganger;

public class RenderDoppleganger extends RenderBiped {

  float grainIntensity = 0.05F;
  float disfiguration = 0.025F;

  ShaderCallback callback = new ShaderCallback() {

    @Override
    public void call(int shader) {
      // Frag Uniforms
      int disfigurationUniform = ARBShaderObjects.glGetUniformLocationARB(shader, "disfiguration");
      ARBShaderObjects.glUniform1fARB(disfigurationUniform, disfiguration);

      // Vert Uniforms
      int grainIntensityUniform = ARBShaderObjects.glGetUniformLocationARB(shader, "grainIntensity");
      ARBShaderObjects.glUniform1fARB(grainIntensityUniform, grainIntensity);
    }
  };

  public RenderDoppleganger() {
    super(new ModelBiped(0.5F), 0F);
  }

  @Override
  public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9) {
    EntityDoppleganger dopple = (EntityDoppleganger) par1Entity;
    BossBarHandler.setCurrentBoss(dopple);

    int invulTime = dopple.getInvulTime();
    if(invulTime > 0) {
      grainIntensity = invulTime > 20 ? 1F : invulTime * 0.05F;
      disfiguration = grainIntensity * 0.3F;
    } else {
      disfiguration = (0.025F + dopple.hurtTime * ((1F - 0.15F) / 20F)) / 2F;
      grainIntensity = 0.05F + dopple.hurtTime * ((1F - 0.15F) / 10F);
    }

    ShaderHelper.useShader(ShaderHelper.doppleganger, callback);
    super.doRender(par1Entity, par2, par4, par6, par8, par9);
    ShaderHelper.releaseShader();
  }

  @Override
  protected ResourceLocation getEntityTexture(Entity par1Entity) {
    return Minecraft.getMinecraft().thePlayer.getLocationSkin();
  }

}
TOP

Related Classes of vazkii.botania.client.render.entity.RenderDoppleganger

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.