mirror of
https://github.com/GTNewHorizons/TinkersConstruct.git
synced 2026-11-13 08:54:12 +00:00
321 lines
10 KiB
Java
321 lines
10 KiB
Java
package tconstruct.client.entity;
|
|||
|
|
|
||
|
|
import java.util.ArrayList;
|
||
|
|
import java.util.List;
|
||
|
|
|
||
|
|
import net.minecraft.client.model.ModelBase;
|
||
|
|
import net.minecraft.client.model.TextureOffset;
|
||
|
|
import net.minecraft.client.renderer.GLAllocation;
|
||
|
|
import net.minecraft.client.renderer.Tessellator;
|
||
|
|
|
||
|
|
import org.lwjgl.opengl.GL11;
|
||
|
|
|
||
|
|
import cpw.mods.fml.relauncher.Side;
|
||
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
||
|
|
|
||
|
|
public class ModelRendererDegrees
|
||
|
|
{
|
||
|
|
/** The size of the texture file's width in pixels. */
|
||
|
|
public float textureWidth;
|
||
|
|
|
||
|
|
/** The size of the texture file's height in pixels. */
|
||
|
|
public float textureHeight;
|
||
|
|
|
||
|
|
/** The X offset into the texture used for displaying this model */
|
||
|
|
private int textureOffsetX;
|
||
|
|
|
||
|
|
/** The Y offset into the texture used for displaying this model */
|
||
|
|
private int textureOffsetY;
|
||
|
|
public float rotationPointX;
|
||
|
|
public float rotationPointY;
|
||
|
|
public float rotationPointZ;
|
||
|
|
public float rotateAngleX;
|
||
|
|
public float rotateAngleY;
|
||
|
|
public float rotateAngleZ;
|
||
|
|
private boolean compiled;
|
||
|
|
|
||
|
|
/** The GL display list rendered by the Tessellator for this model */
|
||
|
|
private int displayList;
|
||
|
|
public boolean mirror;
|
||
|
|
public boolean showModel;
|
||
|
|
|
||
|
|
/** Hides the model. */
|
||
|
|
public boolean isHidden;
|
||
|
|
public List cubeList;
|
||
|
|
public List childModels;
|
||
|
|
public final String boxName;
|
||
|
|
private ModelBase baseModel;
|
||
|
|
public float field_82906_o;
|
||
|
|
public float field_82908_p;
|
||
|
|
public float field_82907_q;
|
||
|
|
|
||
|
|
public ModelRendererDegrees(ModelBase par1ModelBase, String par2Str)
|
||
|
|
{
|
||
|
|
this.textureWidth = 64.0F;
|
||
|
|
this.textureHeight = 32.0F;
|
||
|
|
this.compiled = false;
|
||
|
|
this.displayList = 0;
|
||
|
|
this.mirror = false;
|
||
|
|
this.showModel = true;
|
||
|
|
this.isHidden = false;
|
||
|
|
this.cubeList = new ArrayList();
|
||
|
|
this.baseModel = par1ModelBase;
|
||
|
|
par1ModelBase.boxList.add(this);
|
||
|
|
this.boxName = par2Str;
|
||
|
|
this.setTextureSize(par1ModelBase.textureWidth, par1ModelBase.textureHeight);
|
||
|
|
}
|
||
|
|
|
||
|
|
public ModelRendererDegrees(ModelBase par1ModelBase)
|
||
|
|
{
|
||
|
|
this(par1ModelBase, (String) null);
|
||
|
|
}
|
||
|
|
|
||
|
|
public ModelRendererDegrees(ModelBase par1ModelBase, int par2, int par3)
|
||
|
|
{
|
||
|
|
this(par1ModelBase);
|
||
|
|
this.setTextureOffset(par2, par3);
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Sets the current box's rotation points and rotation angles to another box.
|
||
|
|
*/
|
||
|
|
public void addChild (ModelRendererDegrees par1ModelRenderer)
|
||
|
|
{
|
||
|
|
if (this.childModels == null)
|
||
|
|
{
|
||
|
|
this.childModels = new ArrayList();
|
||
|
|
}
|
||
|
|
|
||
|
|
this.childModels.add(par1ModelRenderer);
|
||
|
|
}
|
||
|
|
|
||
|
|
public ModelRendererDegrees setTextureOffset (int par1, int par2)
|
||
|
|
{
|
||
|
|
this.textureOffsetX = par1;
|
||
|
|
this.textureOffsetY = par2;
|
||
|
|
return this;
|
||
|
|
}
|
||
|
|
|
||
|
|
public ModelRendererDegrees addBox (String par1Str, float par2, float par3, float par4, int par5, int par6, int par7)
|
||
|
|
{
|
||
|
|
par1Str = this.boxName + "." + par1Str;
|
||
|
|
TextureOffset textureoffset = this.baseModel.getTextureOffset(par1Str);
|
||
|
|
this.setTextureOffset(textureoffset.textureOffsetX, textureoffset.textureOffsetY);
|
||
|
|
this.cubeList.add((new ModelBoxDegrees(this, this.textureOffsetX, this.textureOffsetY, par2, par3, par4, par5, par6, par7, 0.0F)).func_78244_a(par1Str));
|
||
|
|
return this;
|
||
|
|
}
|
||
|
|
|
||
|
|
public ModelRendererDegrees addBox (float par1, float par2, float par3, int par4, int par5, int par6)
|
||
|
|
{
|
||
|
|
this.cubeList.add(new ModelBoxDegrees(this, this.textureOffsetX, this.textureOffsetY, par1, par2, par3, par4, par5, par6, 0.0F));
|
||
|
|
return this;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Creates a textured box. Args: originX, originY, originZ, width, height, depth, scaleFactor.
|
||
|
|
*/
|
||
|
|
public void addBox (float par1, float par2, float par3, int par4, int par5, int par6, float par7)
|
||
|
|
{
|
||
|
|
this.cubeList.add(new ModelBoxDegrees(this, this.textureOffsetX, this.textureOffsetY, par1, par2, par3, par4, par5, par6, par7));
|
||
|
|
}
|
||
|
|
|
||
|
|
public void setRotationPoint (float par1, float par2, float par3)
|
||
|
|
{
|
||
|
|
this.rotationPointX = par1;
|
||
|
|
this.rotationPointY = par2;
|
||
|
|
this.rotationPointZ = par3;
|
||
|
|
}
|
||
|
|
|
||
|
|
@SideOnly(Side.CLIENT)
|
||
|
|
public void render (float par1)
|
||
|
|
{
|
||
|
|
if (!this.isHidden)
|
||
|
|
{
|
||
|
|
if (this.showModel)
|
||
|
|
{
|
||
|
|
if (!this.compiled)
|
||
|
|
{
|
||
|
|
this.compileDisplayList(par1);
|
||
|
|
}
|
||
|
|
|
||
|
|
GL11.glTranslatef(this.field_82906_o, this.field_82908_p, this.field_82907_q);
|
||
|
|
int i;
|
||
|
|
|
||
|
|
if (this.rotateAngleX == 0.0F && this.rotateAngleY == 0.0F && this.rotateAngleZ == 0.0F)
|
||
|
|
{
|
||
|
|
if (this.rotationPointX == 0.0F && this.rotationPointY == 0.0F && this.rotationPointZ == 0.0F)
|
||
|
|
{
|
||
|
|
GL11.glCallList(this.displayList);
|
||
|
|
|
||
|
|
if (this.childModels != null)
|
||
|
|
{
|
||
|
|
for (i = 0; i < this.childModels.size(); ++i)
|
||
|
|
{
|
||
|
|
((ModelRendererDegrees) this.childModels.get(i)).render(par1);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
GL11.glTranslatef(this.rotationPointX * par1, this.rotationPointY * par1, this.rotationPointZ * par1);
|
||
|
|
GL11.glCallList(this.displayList);
|
||
|
|
|
||
|
|
if (this.childModels != null)
|
||
|
|
{
|
||
|
|
for (i = 0; i < this.childModels.size(); ++i)
|
||
|
|
{
|
||
|
|
((ModelRendererDegrees) this.childModels.get(i)).render(par1);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
GL11.glTranslatef(-this.rotationPointX * par1, -this.rotationPointY * par1, -this.rotationPointZ * par1);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
GL11.glPushMatrix();
|
||
|
|
GL11.glTranslatef(this.rotationPointX * par1, this.rotationPointY * par1, this.rotationPointZ * par1);
|
||
|
|
|
||
|
|
if (this.rotateAngleZ != 0.0F)
|
||
|
|
{
|
||
|
|
GL11.glRotatef(this.rotateAngleZ, 0.0F, 0.0F, 1.0F);
|
||
|
|
}
|
||
|
|
|
||
|
|
if (this.rotateAngleY != 0.0F)
|
||
|
|
{
|
||
|
|
GL11.glRotatef(this.rotateAngleY, 0.0F, 1.0F, 0.0F);
|
||
|
|
}
|
||
|
|
|
||
|
|
if (this.rotateAngleX != 0.0F)
|
||
|
|
{
|
||
|
|
GL11.glRotatef(this.rotateAngleX, 1.0F, 0.0F, 0.0F);
|
||
|
|
}
|
||
|
|
|
||
|
|
GL11.glCallList(this.displayList);
|
||
|
|
|
||
|
|
if (this.childModels != null)
|
||
|
|
{
|
||
|
|
for (i = 0; i < this.childModels.size(); ++i)
|
||
|
|
{
|
||
|
|
((ModelRendererDegrees) this.childModels.get(i)).render(par1);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
GL11.glPopMatrix();
|
||
|
|
}
|
||
|
|
|
||
|
|
GL11.glTranslatef(-this.field_82906_o, -this.field_82908_p, -this.field_82907_q);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
@SideOnly(Side.CLIENT)
|
||
|
|
public void renderWithRotation (float par1)
|
||
|
|
{
|
||
|
|
if (!this.isHidden)
|
||
|
|
{
|
||
|
|
if (this.showModel)
|
||
|
|
{
|
||
|
|
if (!this.compiled)
|
||
|
|
{
|
||
|
|
this.compileDisplayList(par1);
|
||
|
|
}
|
||
|
|
|
||
|
|
GL11.glPushMatrix();
|
||
|
|
GL11.glTranslatef(this.rotationPointX * par1, this.rotationPointY * par1, this.rotationPointZ * par1);
|
||
|
|
|
||
|
|
if (this.rotateAngleY != 0.0F)
|
||
|
|
{
|
||
|
|
GL11.glRotatef(this.rotateAngleY * (180F / (float) Math.PI), 0.0F, 1.0F, 0.0F);
|
||
|
|
}
|
||
|
|
|
||
|
|
if (this.rotateAngleX != 0.0F)
|
||
|
|
{
|
||
|
|
GL11.glRotatef(this.rotateAngleX * (180F / (float) Math.PI), 1.0F, 0.0F, 0.0F);
|
||
|
|
}
|
||
|
|
|
||
|
|
if (this.rotateAngleZ != 0.0F)
|
||
|
|
{
|
||
|
|
GL11.glRotatef(this.rotateAngleZ * (180F / (float) Math.PI), 0.0F, 0.0F, 1.0F);
|
||
|
|
}
|
||
|
|
|
||
|
|
GL11.glCallList(this.displayList);
|
||
|
|
GL11.glPopMatrix();
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Allows the changing of Angles after a box has been rendered
|
||
|
|
*/
|
||
|
|
@SideOnly(Side.CLIENT)
|
||
|
|
public void postRender (float par1)
|
||
|
|
{
|
||
|
|
if (!this.isHidden)
|
||
|
|
{
|
||
|
|
if (this.showModel)
|
||
|
|
{
|
||
|
|
if (!this.compiled)
|
||
|
|
{
|
||
|
|
this.compileDisplayList(par1);
|
||
|
|
}
|
||
|
|
|
||
|
|
if (this.rotateAngleX == 0.0F && this.rotateAngleY == 0.0F && this.rotateAngleZ == 0.0F)
|
||
|
|
{
|
||
|
|
if (this.rotationPointX != 0.0F || this.rotationPointY != 0.0F || this.rotationPointZ != 0.0F)
|
||
|
|
{
|
||
|
|
GL11.glTranslatef(this.rotationPointX * par1, this.rotationPointY * par1, this.rotationPointZ * par1);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
else
|
||
|
|
{
|
||
|
|
GL11.glTranslatef(this.rotationPointX * par1, this.rotationPointY * par1, this.rotationPointZ * par1);
|
||
|
|
|
||
|
|
if (this.rotateAngleZ != 0.0F)
|
||
|
|
{
|
||
|
|
GL11.glRotatef(this.rotateAngleZ, 0.0F, 0.0F, 1.0F);
|
||
|
|
}
|
||
|
|
|
||
|
|
if (this.rotateAngleY != 0.0F)
|
||
|
|
{
|
||
|
|
GL11.glRotatef(this.rotateAngleY, 0.0F, 1.0F, 0.0F);
|
||
|
|
}
|
||
|
|
|
||
|
|
if (this.rotateAngleX != 0.0F)
|
||
|
|
{
|
||
|
|
GL11.glRotatef(this.rotateAngleX, 1.0F, 0.0F, 0.0F);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Compiles a GL display list for this model
|
||
|
|
*/
|
||
|
|
@SideOnly(Side.CLIENT)
|
||
|
|
private void compileDisplayList (float par1)
|
||
|
|
{
|
||
|
|
this.displayList = GLAllocation.generateDisplayLists(1);
|
||
|
|
GL11.glNewList(this.displayList, GL11.GL_COMPILE);
|
||
|
|
Tessellator tessellator = Tessellator.instance;
|
||
|
|
|
||
|
|
for (int i = 0; i < this.cubeList.size(); ++i)
|
||
|
|
{
|
||
|
|
((ModelBoxDegrees) this.cubeList.get(i)).render(tessellator, par1);
|
||
|
|
}
|
||
|
|
|
||
|
|
GL11.glEndList();
|
||
|
|
this.compiled = true;
|
||
|
|
}
|
||
|
|
|
||
|
|
/**
|
||
|
|
* Returns the model renderer with the new texture parameters.
|
||
|
|
*/
|
||
|
|
public ModelRendererDegrees setTextureSize (int par1, int par2)
|
||
|
|
{
|
||
|
|
this.textureWidth = (float) par1;
|
||
|
|
this.textureHeight = (float) par2;
|
||
|
|
return this;
|
||
|
|
}
|
||
|
|
}
|