Package pneumaticCraft.client.model

Source Code of pneumaticCraft.client.model.ModelPneumaticDoorBase

package pneumaticCraft.client.model;

import net.minecraft.block.Block;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.entity.Entity;
import net.minecraft.item.ItemBlock;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;

import org.lwjgl.opengl.GL11;

import pneumaticCraft.common.tileentity.TileEntityPneumaticDoorBase;
import pneumaticCraft.common.util.PneumaticCraftUtils;
import pneumaticCraft.lib.Textures;

public class ModelPneumaticDoorBase extends ModelBase implements IBaseModel{
    //fields
    ModelRenderer Shape1;
    ModelRenderer Shape2;
    ModelRenderer Shape4;
    ModelRenderer Shape5;
    ModelRenderer Cilinder1;
    ModelRenderer Cilinder2;
    ModelRenderer Cilinder3;

    public ModelPneumaticDoorBase(){
        textureWidth = 64;
        textureHeight = 64;

        Shape1 = new ModelRenderer(this, 0, 0);
        Shape1.addBox(0F, 0F, 0F, 16, 12, 16);
        Shape1.setRotationPoint(-8F, 12F, -8F);
        Shape1.setTextureSize(64, 32);
        Shape1.mirror = true;
        setRotation(Shape1, 0F, 0F, 0F);
        Shape2 = new ModelRenderer(this, 0, 0);
        Shape2.addBox(0F, 0F, 0F, 3, 4, 16);
        Shape2.setRotationPoint(-8F, 8F, -8F);
        Shape2.setTextureSize(64, 32);
        Shape2.mirror = true;
        setRotation(Shape2, 0F, 0F, 0F);
        Shape4 = new ModelRenderer(this, 0, 0);
        Shape4.addBox(0F, 0F, 0F, 13, 4, 2);
        Shape4.setRotationPoint(-5F, 8F, -8F);
        Shape4.setTextureSize(64, 32);
        Shape4.mirror = true;
        setRotation(Shape4, 0F, 0F, 0F);
        Shape5 = new ModelRenderer(this, 0, 0);
        Shape5.addBox(0F, 0F, 0F, 2, 4, 14);
        Shape5.setRotationPoint(6F, 8F, -6F);
        Shape5.setTextureSize(64, 32);
        Shape5.mirror = true;
        setRotation(Shape5, 0F, 0F, 0F);
        Cilinder1 = new ModelRenderer(this, 0, 28);
        Cilinder1.addBox(0F, 0F, 0F, 3, 3, 10);
        Cilinder1.setRotationPoint(2.5F, 8.5F, -6F);
        Cilinder1.setTextureSize(64, 32);
        Cilinder1.mirror = true;
        setRotation(Cilinder1, 0F, 0F, 0F);
        Cilinder2 = new ModelRenderer(this, 0, 28);
        Cilinder2.addBox(0F, 0F, 0F, 2, 2, 10);
        Cilinder2.setRotationPoint(3F, 9F, -6F);
        Cilinder2.setTextureSize(64, 32);
        Cilinder2.mirror = true;
        setRotation(Cilinder2, 0F, 0F, 0F);
        Cilinder3 = new ModelRenderer(this, 0, 28);
        Cilinder3.addBox(0F, 0F, 0F, 1, 1, 10);
        Cilinder3.setRotationPoint(3.5F, 9.5F, -6F);
        Cilinder3.setTextureSize(64, 32);
        Cilinder3.mirror = true;
        setRotation(Cilinder3, 0F, 0F, 0F);
    }

    @Override
    public void render(Entity entity, float f, float f1, float f2, float f3, float f4, float f5){
        super.render(entity, f, f1, f2, f3, f4, f5);
        setRotationAngles(f, f1, f2, f3, f4, f5, entity);
        Shape1.render(f5);
        Shape2.render(f5);
        Shape4.render(f5);
        Shape5.render(f5);
        Cilinder1.render(f5);
        Cilinder2.render(f5);
        Cilinder3.render(f5);
    }

    public void renderModel(float size, float progress, boolean renderBase, boolean rightGoing){
        if(renderBase) {
            Shape1.render(size);
            Shape2.render(size);
            Shape4.render(size);
            Shape5.render(size);
        }
        float cosinus = /*12 / 16F -*/(float)Math.sin(Math.toRadians((1 - progress) * 90)) * 12 / 16F;
        float sinus = 9 / 16F - (float)Math.cos(Math.toRadians((1 - progress) * 90)) * 9 / 16F;
        double extension = Math.sqrt(Math.pow(sinus, 2) + Math.pow(cosinus + 4 / 16F, 2));
        //System.out.println("sinus: " + sinus);
        GL11.glTranslated(((rightGoing ? -4 : 0) + 2.5) / 16F, 0, -6 / 16F);
        double cilinderAngle = Math.toDegrees(Math.atan(sinus / (cosinus + 14 / 16F)));
        GL11.glRotated(cilinderAngle, 0, rightGoing ? 1 : -1, 0);
        GL11.glTranslated(((rightGoing ? -3 : 0) - 2.5) / 16F, 0, 6 / 16F);
        double extensionPart = extension * 0.5D;
        Cilinder1.render(size);
        GL11.glTranslated(0, 0, extensionPart);
        Cilinder2.render(size);
        GL11.glTranslated(0, 0, extensionPart);
        Cilinder3.render(size);
    }

    private void setRotation(ModelRenderer model, float x, float y, float z){
        model.rotateAngleX = x;
        model.rotateAngleY = y;
        model.rotateAngleZ = z;
    }

    @Override
    public void renderStatic(float size, TileEntity tile){

    }

    @Override
    public ResourceLocation getModelTexture(TileEntity tile){
        return Textures.MODEL_PNEUMATIC_DOOR_BASE;
    }

    @Override
    public boolean rotateModelBasedOnBlockMeta(){
        return false;
    }

    @Override
    public void renderDynamic(float size, TileEntity tile, float partialTicks){
        if(tile instanceof TileEntityPneumaticDoorBase) {
            TileEntityPneumaticDoorBase door = (TileEntityPneumaticDoorBase)tile;
            ItemStack camoStack = door.getStackInSlot(TileEntityPneumaticDoorBase.CAMO_SLOT);
            boolean renderBase = true;
            if(camoStack != null && camoStack.getItem() instanceof ItemBlock) {
                Block block = Block.getBlockFromItem(camoStack.getItem());
                renderBase = !PneumaticCraftUtils.isRenderIDCamo(block.getRenderType());
            }
            PneumaticCraftUtils.rotateMatrixByMetadata(door.orientation.ordinal());
            renderModel(size, door.oldProgress + (door.progress - door.oldProgress) * partialTicks, renderBase, ((TileEntityPneumaticDoorBase)tile).rightGoing);
        } else {
            renderModel(size, 1, true, false);
        }
    }

}
TOP

Related Classes of pneumaticCraft.client.model.ModelPneumaticDoorBase

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.