cn.academy.vanilla.electromaster.client.effect.RailgunHandEffect.java Source code

Java tutorial

Introduction

Here is the source code for cn.academy.vanilla.electromaster.client.effect.RailgunHandEffect.java

Source

/**
* Copyright (c) Lambda Innovation, 2013-2016
* This file is part of the AcademyCraft mod.
* https://github.com/LambdaInnovation/AcademyCraft
* Licensed under GPLv3, see project root for more information.
*/
package cn.academy.vanilla.electromaster.client.effect;

import cn.academy.core.Resources;
import cn.lambdalib.util.client.RenderUtils;
import cn.lambdalib.util.client.renderhook.PlayerRenderHook;
import cn.lambdalib.util.client.shader.GLSLMesh;
import cn.lambdalib.util.client.shader.ShaderSimple;
import cn.lambdalib.util.deprecated.MeshUtils;
import net.minecraft.client.Minecraft;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL20;

import static org.lwjgl.opengl.GL11.*;

/**
 * @author WeAthFolD
 */
public class RailgunHandEffect extends PlayerRenderHook {

    static final int PER_FRAME = 40, COUNT = 40;
    ResourceLocation[] textures;
    GLSLMesh mesh;

    public RailgunHandEffect() {
        textures = Resources.getEffectSeq("arc_burst", COUNT);
        mesh = new GLSLMesh();
        mesh = MeshUtils.createBillboard(mesh, -1, -1, 1, 1);
    }

    @Override
    public void renderHand(boolean firstPerson) {
        if (RenderUtils.isInShadowPass())
            return;

        long dt = getDeltaTime();
        if (dt >= PER_FRAME * COUNT) {
            dispose();
            return;
        }

        int frame = (int) (dt / PER_FRAME);

        glEnable(GL_ALPHA_TEST);
        glAlphaFunc(GL_GREATER, 0.0f);
        glDisable(GL_CULL_FACE);
        glEnable(GL_BLEND);
        glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
        ShaderSimple.instance().useProgram();
        glPushMatrix();
        if (firstPerson) {
            glTranslated(.26, -.12, -.24);
            glScalef(.4f, .4f, 1f);
        } else {
            EntityPlayer player = Minecraft.getMinecraft().thePlayer;
            glTranslated(0, 0.2, -1);
            glRotated(-player.rotationPitch, 1, 0, 0);
        }
        RenderUtils.loadTexture(textures[frame]);
        mesh.draw(ShaderSimple.instance());
        glPopMatrix();
        GL20.glUseProgram(0);
        glAlphaFunc(GL_GEQUAL, 0.1f);
        glEnable(GL_CULL_FACE);
    }

}