Package com.flansmod.client.tmt

Source Code of com.flansmod.client.tmt.TexturedPolygon

package com.flansmod.client.tmt;

import java.util.ArrayList;

import org.lwjgl.opengl.GL11;

import net.minecraft.util.Vec3;

public class TexturedPolygon
{
  public TexturedPolygon(PositionTextureVertex[] apositionTexturevertex)
  {
    this.invertNormal = false;
    this.vertexPositions = apositionTexturevertex;
    this.nVertices = apositionTexturevertex.length;
    this.iNormals = new ArrayList<Vec3>();
    this.normals = new float[0];
  }
 
  public TexturedPolygon(PositionTextureVertex[] apositionTexturevertex, int par2, int par3, int par4, int par5, float par6, float par7)
  {
    this(apositionTexturevertex);
    float var8 = 0.0F / par6;
    float var9 = 0.0F / par7;
    apositionTexturevertex[0] = apositionTexturevertex[0].setTexturePosition(par4 / par6 - var8, par3 / par7 + var9);
    apositionTexturevertex[1] = apositionTexturevertex[1].setTexturePosition(par2 / par6 + var8, par3 / par7 + var9);
    apositionTexturevertex[2] = apositionTexturevertex[2].setTexturePosition(par2 / par6 + var8, par5 / par7 - var9);
    apositionTexturevertex[3] = apositionTexturevertex[3].setTexturePosition(par4 / par6 - var8, par5 / par7 - var9);
  }
 
  public void setInvertNormal(boolean isSet)
  {
    invertNormal = isSet;
  }
 
  public void setNormals(float x, float y, float z)
  {
    normals = new float[] {x, y, z};
  }
 
  public void flipFace()
  {
    PositionTextureVertex[] var1 = new PositionTextureVertex[this.vertexPositions.length];

    for (int var2 = 0; var2 < this.vertexPositions.length; ++var2)
    {
      var1[var2] = this.vertexPositions[this.vertexPositions.length - var2 - 1];
    }
   
    this.vertexPositions = var1;
  }
 
  public void setNormals(ArrayList<Vec3> vec)
  {
    iNormals = vec;
  }
 
  public void draw(TmtTessellator tessellator, float f)
  {
   
    if(nVertices == 3)
      tessellator.startDrawing(GL11.GL_TRIANGLES);
    else if (nVertices == 4)
      tessellator.startDrawingQuads();
    else
      tessellator.startDrawing(GL11.GL_POLYGON);
   
    if(iNormals.size() == 0)
    {
      if(normals.length == 3)
      {
        if(invertNormal)
        {
          tessellator.setNormal(-normals[0], -normals[1], -normals[2]);
        } else
        {
          tessellator.setNormal(normals[0], normals[1], normals[2]);
        }
      } else
      if(vertexPositions.length >= 3)
      {
        Vec3 Vec3 = vertexPositions[1].vector3D.subtract(vertexPositions[0].vector3D);
        Vec3 Vec31 = vertexPositions[1].vector3D.subtract(vertexPositions[2].vector3D);
        Vec3 Vec32 = Vec31.crossProduct(Vec3).normalize();
   
        if(invertNormal)
        {
          tessellator.setNormal(-(float)Vec32.xCoord, -(float)Vec32.yCoord, -(float)Vec32.zCoord);
        } else
        {
          tessellator.setNormal((float)Vec32.xCoord, (float)Vec32.yCoord, (float)Vec32.zCoord);
        }
      }
      else
      {
        return;
      }
    }
    for(int i = 0; i < nVertices; i++)
    {
      PositionTextureVertex positionTexturevertex = vertexPositions[i];
      if(positionTexturevertex instanceof PositionTransformVertex)
        ((PositionTransformVertex)positionTexturevertex).setTransformation();
      if(i < iNormals.size())
      {
        if(invertNormal)
        {
          tessellator.setNormal(-(float)iNormals.get(i).xCoord, -(float)iNormals.get(i).yCoord, -(float)iNormals.get(i).zCoord);
        }
        else
        {
          tessellator.setNormal((float)iNormals.get(i).xCoord, (float)iNormals.get(i).yCoord, (float)iNormals.get(i).zCoord);
        }
      }
      tessellator.addVertexWithUVW((float)positionTexturevertex.vector3D.xCoord * f, (float)positionTexturevertex.vector3D.yCoord * f, (float)positionTexturevertex.vector3D.zCoord * f, positionTexturevertex.texturePositionX, positionTexturevertex.texturePositionY, positionTexturevertex.texturePositionW);
    }

    tessellator.draw();
  }
 
  public PositionTextureVertex[] vertexPositions;
  public int nVertices;
  private boolean invertNormal;
  private float[] normals;
  private ArrayList<Vec3> iNormals;
}
TOP

Related Classes of com.flansmod.client.tmt.TexturedPolygon

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.