Package mekanism.client.model

Source Code of mekanism.client.model.ModelRendererSelectiveFace

package mekanism.client.model;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import mekanism.client.render.MekanismRenderer.BooleanArray;
import mekanism.client.render.MekanismRenderer.DisplayInteger;

import net.minecraft.client.model.ModelBase;
import net.minecraft.client.renderer.Tessellator;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;

import org.lwjgl.opengl.GL11;

@SideOnly(Side.CLIENT)
public class ModelRendererSelectiveFace
{
  public float textureWidth;
  public float textureHeight;

  public float offsetX;
  public float offsetY;
  public float offsetZ;

  public float rotationPointX;
  public float rotationPointY;
  public float rotationPointZ;

  public float rotateAngleX;
  public float rotateAngleY;
  public float rotateAngleZ;

  public boolean mirror;
  public boolean showModel;
  public boolean isHidden;

  public List<ModelBoxSelectiveFace> cubeList = new ArrayList<ModelBoxSelectiveFace>();

  private int textureOffsetX;
  private int textureOffsetY;

  private ModelBase baseModel;

  private Map<BooleanArray, DisplayInteger> displayLists = new HashMap<BooleanArray, DisplayInteger>();


  public ModelRendererSelectiveFace(ModelBase modelBase)
  {
    textureWidth = 64.0F;
    textureHeight = 32.0F;
    showModel = true;
    baseModel = modelBase;

    setTextureSize(modelBase.textureWidth, modelBase.textureHeight);
  }

  public ModelRendererSelectiveFace(ModelBase modelBase, int offsetX, int offsetY)
  {
    this(modelBase);
    setTextureOffset(offsetX, offsetY);
  }

  public ModelRendererSelectiveFace setTextureOffset(int offsetX, int offsetY)
  {
    textureOffsetX = offsetX;
    textureOffsetY = offsetY;

    return this;
  }

  public ModelRendererSelectiveFace addBox(float minX, float minY, float minZ, int sizeX, int sizeY, int sizeZ)
  {
    cubeList.add(new ModelBoxSelectiveFace(this, textureOffsetX, textureOffsetY, minX, minY, minZ, sizeX, sizeY, sizeZ, 0.0F));
    return this;
  }

  public void setRotationPoint(float pointX, float pointY, float pointZ)
  {
    rotationPointX = pointX;
    rotationPointY = pointY;
    rotationPointZ = pointZ;
  }

  @SideOnly(Side.CLIENT)
  public void render(boolean[] dontRender, float scaleFactor)
  {
    if(!isHidden)
    {
      if(showModel)
      {
        DisplayInteger currentDisplayList = displayLists.get(new BooleanArray(dontRender));

        if(currentDisplayList == null)
        {
          currentDisplayList = compileDisplayList(dontRender, scaleFactor);
        }

        GL11.glTranslatef(offsetX, offsetY, offsetZ);

        int i;

        if(rotateAngleX == 0.0F && rotateAngleY == 0.0F && rotateAngleZ == 0.0F)
        {
          if(rotationPointX == 0.0F && rotationPointY == 0.0F && rotationPointZ == 0.0F)
          {
            currentDisplayList.render();
          }
          else {
            GL11.glTranslatef(rotationPointX * scaleFactor, rotationPointY * scaleFactor, rotationPointZ * scaleFactor);
            currentDisplayList.render();
            GL11.glTranslatef(-rotationPointX * scaleFactor, -rotationPointY * scaleFactor, -rotationPointZ * scaleFactor);
          }
        }
        else {
          GL11.glPushMatrix();
          GL11.glTranslatef(rotationPointX * scaleFactor, rotationPointY * scaleFactor, rotationPointZ * scaleFactor);

          if(rotateAngleZ != 0.0F)
          {
            GL11.glRotatef(rotateAngleZ * (180F / (float)Math.PI), 0.0F, 0.0F, 1.0F);
          }

          if(rotateAngleY != 0.0F)
          {
            GL11.glRotatef(rotateAngleY * (180F / (float)Math.PI), 0.0F, 1.0F, 0.0F);
          }

          if(rotateAngleX != 0.0F)
          {
            GL11.glRotatef(rotateAngleX * (180F / (float)Math.PI), 1.0F, 0.0F, 0.0F);
          }

          currentDisplayList.render();
          GL11.glPopMatrix();
        }

        GL11.glTranslatef(-offsetX, -offsetY, -offsetZ);
      }
    }
  }

  @SideOnly(Side.CLIENT)
  private DisplayInteger compileDisplayList(boolean[] dontRender, float scaleFactor)
  {
    DisplayInteger displayList = DisplayInteger.createAndStart();
    Tessellator tessellator = Tessellator.instance;

    for(int i = 0; i < cubeList.size(); ++i)
    {
      cubeList.get(i).render(tessellator, dontRender, scaleFactor);
    }

    displayList.endList();
    displayLists.put(new BooleanArray(dontRender), displayList);

    return displayList;
  }

  public ModelRendererSelectiveFace setTextureSize(int sizeX, int sizeY)
  {
    textureWidth = sizeX;
    textureHeight = sizeY;

    return this;
  }
}
TOP

Related Classes of mekanism.client.model.ModelRendererSelectiveFace

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.