Package pneumaticCraft.client.render

Source Code of pneumaticCraft.client.render.RenderProgressingLine

package pneumaticCraft.client.render;

import net.minecraft.client.renderer.Tessellator;
import net.minecraft.inventory.Slot;

import org.lwjgl.opengl.GL11;

import pneumaticCraft.client.gui.GuiSecurityStationBase;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

public class RenderProgressingLine{
    public double startX;
    public double startY;
    public double startZ;
    public double endX;
    public double endY;
    public double endZ;
    protected float progress = 0;

    public RenderProgressingLine(){}

    public RenderProgressingLine(double startX, double startY, double startZ, double endX, double endY, double endZ){
        this.startX = startX;
        this.startY = startY;
        this.startZ = startZ;
        this.endX = endX;
        this.endY = endY;
        this.endZ = endZ;
    }

    public RenderProgressingLine(double startX, double startY, double endX, double endY){
        this(startX, startY, 0, endX, endY, 0);
    }

    public RenderProgressingLine(RenderProgressingLine copy){
        this(copy.startX, copy.startY, copy.startZ, copy.endX, copy.endY, copy.endZ);
        progress = copy.progress;
    }

    public boolean hasLineSameProperties(double startX, double startY, double startZ, double endX, double endY, double endZ){
        return Math.abs(startX - this.startX) < 0.01D && Math.abs(startY - this.startY) < 0.01D && Math.abs(startZ - this.startZ) < 0.01D && Math.abs(endX - this.endX) < 0.01D && Math.abs(endY - this.endY) < 0.01D && Math.abs(endZ - this.endZ) < 0.01D;
    }

    public float getProgress(){
        return progress;
    }

    public void setProgress(float progress){
        this.progress = progress;
    }

    /**
     * Increases the progress by the given amount.
     * @param increment
     * @return Returns true when the maximum progress has been reached.
     */
    public boolean incProgress(float increment){
        progress += increment;
        if(progress > 1F) {
            progress = 1F;
            return true;
        } else if(progress < 0F) {
            progress = 0F;
            return true;
        }
        return false;
    }

    public boolean incProgressByDistance(double distance){
        double totalDistance = Math.sqrt(Math.pow(endX - startX, 2) + Math.pow(endY - startY, 2) + Math.pow(endZ - startZ, 2));
        progress += distance / totalDistance;
        if(progress > 1F) {
            progress = 1F;
            return true;
        } else if(progress < 0F) {
            progress = 0F;
            return true;
        }
        return false;
    }

    @SideOnly(Side.CLIENT)
    public void render(){
        Tessellator tess = Tessellator.instance;
        tess.startDrawing(GL11.GL_LINES);
        tess.addVertex(startX, startY, startZ);
        tess.addVertex(startX + (endX - startX) * progress, startY + (endY - startY) * progress, startZ + (endZ - startZ) * progress);
        tess.draw();
    }

    @SideOnly(Side.CLIENT)
    public void renderInterpolated(RenderProgressingLine lastTickLine, float partialTick){
        Tessellator tess = Tessellator.instance;
        tess.startDrawing(GL11.GL_LINES);
        tess.addVertex(getInter(startX, lastTickLine.startX, partialTick), getInter(startY, lastTickLine.startY, partialTick), getInter(startZ, lastTickLine.startZ, partialTick));
        tess.addVertex(getInter(startX, lastTickLine.startX, partialTick) + (getInter(endX, lastTickLine.endX, partialTick) - getInter(startX, lastTickLine.startX, partialTick)) * progress, getInter(startY, lastTickLine.startY, partialTick) + (getInter(startY, lastTickLine.startY, partialTick) - getInter(endY, lastTickLine.endY, partialTick)) * progress, getInter(startZ, lastTickLine.startZ, partialTick) + (getInter(endZ, lastTickLine.endZ, partialTick) - getInter(startZ, lastTickLine.startZ, partialTick)) * progress);
        tess.draw();
    }

    protected double getInter(double cur, double old, float partialTick){
        return old + (cur - old) * partialTick;
    }

    public int getPointedSlotNumber(GuiSecurityStationBase gui){
        Slot slot = gui.getSlotAtPosition((int)endX, (int)endY);
        return slot != null ? slot.slotNumber : 0;
    }
}
TOP

Related Classes of pneumaticCraft.client.render.RenderProgressingLine

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.