Package buildcraft.factory.render

Source Code of buildcraft.factory.render.RenderRefinery

/**
* Copyright (c) 2011-2014, SpaceToad and the BuildCraft Team
* http://www.mod-buildcraft.com
*
* BuildCraft is distributed under the terms of the Minecraft Mod Public
* License 1.0, or MMPL. Please check the contents of the license located in
* http://www.mod-buildcraft.com/MMPL-1.0.txt
*/
package buildcraft.factory.render;

import org.lwjgl.opengl.GL11;

import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.client.renderer.tileentity.TileEntityRendererDispatcher;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.ResourceLocation;

import net.minecraftforge.fluids.FluidStack;

import buildcraft.core.DefaultProps;
import buildcraft.core.IInventoryRenderer;
import buildcraft.core.fluids.Tank;
import buildcraft.core.render.FluidRenderer;
import buildcraft.core.render.RenderUtils;
import buildcraft.factory.TileRefinery;

public class RenderRefinery extends TileEntitySpecialRenderer implements IInventoryRenderer {

  private static final ResourceLocation TEXTURE = new ResourceLocation(DefaultProps.TEXTURE_PATH_BLOCKS + "/refinery.png");
  private static final float pixel = (float) (1.0 / 16.0);
  private final ModelRenderer tank;
  private final ModelRenderer[] magnet = new ModelRenderer[4];
  private final ModelBase model = new ModelBase() {
  };

  public RenderRefinery() {

    // constructor:
    tank = new ModelRenderer(model, 0, 0);
    tank.addBox(-4F, -8F, -4F, 8, 16, 8);
    tank.rotationPointX = 8;
    tank.rotationPointY = 8;
    tank.rotationPointZ = 8;

    // constructor:

    for (int i = 0; i < 4; ++i) {
      magnet[i] = new ModelRenderer(model, 32, i * 8);
      magnet[i].addBox(0, -8F, -8F, 8, 4, 4);
      magnet[i].rotationPointX = 8;
      magnet[i].rotationPointY = 8;
      magnet[i].rotationPointZ = 8;

    }

    field_147501_a = TileEntityRendererDispatcher.instance;
  }

  public RenderRefinery(String baseTexture) {
    this();
  }

  @Override
  public void inventoryRender(double x, double y, double z, float f, float f1) {
    render(null, x, y, z);
  }

  @Override
  public void renderTileEntityAt(TileEntity tileentity, double x, double y, double z, float f) {

    render((TileRefinery) tileentity, x, y, z);
  }

  private void render(TileRefinery tile, double x, double y, double z) {
    FluidStack liquid1 = null, liquid2 = null, liquidResult = null;
    int color1 = 0xFFFFFF, color2 = 0xFFFFFF, colorResult = 0xFFFFFF;

    float anim = 0;
    int angle = 0;
    ModelRenderer theMagnet = magnet[0];
    if (tile != null) {
      if (tile.tanks[0].getFluid() != null) {
        liquid1 = tile.tanks[0].getFluid();
        color1 = tile.tanks[0].colorRenderCache;
      }

      if (tile.tanks[1].getFluid() != null) {
        liquid2 = tile.tanks[1].getFluid();
        color2 = tile.tanks[1].colorRenderCache;
      }

      if (tile.result.getFluid() != null) {
        liquidResult = tile.result.getFluid();
        colorResult = tile.result.colorRenderCache;
      }

      anim = tile.getAnimationStage();

      angle = 0;
      switch (tile.getWorldObj().getBlockMetadata(tile.xCoord, tile.yCoord, tile.zCoord)) {
        case 2:
          angle = 90;
          break;
        case 3:
          angle = 270;
          break;
        case 4:
          angle = 180;
          break;
        case 5:
          angle = 0;
          break;
      }

      if (tile.animationSpeed <= 1) {
        theMagnet = magnet[0];
      } else if (tile.animationSpeed <= 2.5) {
        theMagnet = magnet[1];
      } else if (tile.animationSpeed <= 4.5) {
        theMagnet = magnet[2];
      } else {
        theMagnet = magnet[3];
      }
    }

    GL11.glPushMatrix();
    GL11.glPushAttrib(GL11.GL_ENABLE_BIT);
    GL11.glEnable(GL11.GL_LIGHTING);
    GL11.glDisable(GL11.GL_CULL_FACE);

    GL11.glTranslatef((float) x + 0.5F, (float) y + 0.5F, (float) z + 0.5F);
    GL11.glScalef(0.99F, 0.99F, 0.99F);

    GL11.glRotatef(angle, 0, 1, 0);

    bindTexture(TEXTURE);

    GL11.glPushMatrix();
    GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
    GL11.glTranslatef(-4F * pixel, 0, -4F * pixel);
    tank.render(pixel);
    GL11.glTranslatef(4F * pixel, 0, 4F * pixel);

    GL11.glTranslatef(-4F * pixel, 0, 4F * pixel);
    tank.render(pixel);
    GL11.glTranslatef(4F * pixel, 0, -4F * pixel);

    GL11.glTranslatef(4F * pixel, 0, 0);
    tank.render(pixel);
    GL11.glTranslatef(-4F * pixel, 0, 0);
    GL11.glPopMatrix();

    float trans1, trans2;

    if (anim <= 100) {
      trans1 = 12F * pixel * anim / 100F;
      trans2 = 0;
    } else if (anim <= 200) {
      trans1 = 12F * pixel - (12F * pixel * (anim - 100F) / 100F);
      trans2 = 12F * pixel * (anim - 100F) / 100F;
    } else {
      trans1 = 12F * pixel * (anim - 200F) / 100F;
      trans2 = 12F * pixel - (12F * pixel * (anim - 200F) / 100F);
    }

    GL11.glPushMatrix();
    GL11.glScalef(0.99F, 0.99F, 0.99F);
    GL11.glTranslatef(-0.51F, trans1 - 0.5F, -0.5F);
    theMagnet.render(pixel);
    GL11.glPopMatrix();

    GL11.glPushMatrix();
    GL11.glScalef(0.99F, 0.99F, 0.99F);
    GL11.glTranslatef(-0.51F, trans2 - 0.5F, 12F * pixel - 0.5F);
    theMagnet.render(pixel);
    GL11.glPopMatrix();

    if (tile != null) {
      GL11.glPushAttrib(GL11.GL_ENABLE_BIT);
      GL11.glEnable(GL11.GL_CULL_FACE);
      GL11.glDisable(GL11.GL_LIGHTING);
      GL11.glEnable(GL11.GL_BLEND);
      GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);

      GL11.glTranslatef(-0.5F, -0.5F, -0.5F);
      GL11.glScalef(0.5F, 1, 0.5F);

      if (liquid1 != null && liquid1.amount > 0) {
        int[] list1 = FluidRenderer.getFluidDisplayLists(liquid1, tile.getWorldObj(), false);

        if (list1 != null) {
          bindTexture(FluidRenderer.getFluidSheet(liquid1));
          RenderUtils.setGLColorFromInt(color1);
          GL11.glCallList(list1[getDisplayListIndex(tile.tanks[0])]);
        }
      }

      if (liquid2 != null && liquid2.amount > 0) {
        int[] list2 = FluidRenderer.getFluidDisplayLists(liquid2, tile.getWorldObj(), false);

        if (list2 != null) {
          GL11.glPushMatrix();
          GL11.glTranslatef(0, 0, 1);
          bindTexture(FluidRenderer.getFluidSheet(liquid2));
          RenderUtils.setGLColorFromInt(color2);
          GL11.glCallList(list2[getDisplayListIndex(tile.tanks[1])]);
          GL11.glPopMatrix();
        }
      }


      if (liquidResult != null && liquidResult.amount > 0) {
        int[] list3 = FluidRenderer.getFluidDisplayLists(liquidResult, tile.getWorldObj(), false);

        if (list3 != null) {
          GL11.glPushMatrix();
          GL11.glTranslatef(1, 0, 0.5F);
          bindTexture(FluidRenderer.getFluidSheet(liquidResult));
          RenderUtils.setGLColorFromInt(colorResult);
          GL11.glCallList(list3[getDisplayListIndex(tile.result)]);
          GL11.glPopMatrix();
        }
      }
      GL11.glPopAttrib();
    }

    GL11.glPopAttrib();
    GL11.glPopMatrix();
  }

  private int getDisplayListIndex(Tank tank) {
    return Math.min((int) ((float) tank.getFluidAmount() / (float) tank.getCapacity() * (FluidRenderer.DISPLAY_STAGES - 1)), FluidRenderer.DISPLAY_STAGES - 1);
  }
}
TOP

Related Classes of buildcraft.factory.render.RenderRefinery

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.