You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
308 lines
11 KiB
Java
308 lines
11 KiB
Java
package net.minecraft.client.model;
|
|
|
|
import cpw.mods.fml.relauncher.Side;
|
|
import cpw.mods.fml.relauncher.SideOnly;
|
|
import java.util.ArrayList;
|
|
import java.util.List;
|
|
import net.minecraft.client.renderer.GLAllocation;
|
|
import net.minecraft.client.renderer.Tessellator;
|
|
import org.lwjgl.opengl.GL11;
|
|
|
|
public class ModelRenderer
|
|
{
|
|
/** 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 offsetX;
|
|
public float offsetY;
|
|
public float offsetZ;
|
|
private static final String __OBFID = "CL_00000874";
|
|
|
|
public ModelRenderer(ModelBase p_i1172_1_, String p_i1172_2_)
|
|
{
|
|
this.textureWidth = 64.0F;
|
|
this.textureHeight = 32.0F;
|
|
this.showModel = true;
|
|
this.cubeList = new ArrayList();
|
|
this.baseModel = p_i1172_1_;
|
|
p_i1172_1_.boxList.add(this);
|
|
this.boxName = p_i1172_2_;
|
|
this.setTextureSize(p_i1172_1_.textureWidth, p_i1172_1_.textureHeight);
|
|
}
|
|
|
|
public ModelRenderer(ModelBase p_i1173_1_)
|
|
{
|
|
this(p_i1173_1_, (String)null);
|
|
}
|
|
|
|
public ModelRenderer(ModelBase p_i1174_1_, int p_i1174_2_, int p_i1174_3_)
|
|
{
|
|
this(p_i1174_1_);
|
|
this.setTextureOffset(p_i1174_2_, p_i1174_3_);
|
|
}
|
|
|
|
/**
|
|
* Sets the current box's rotation points and rotation angles to another box.
|
|
*/
|
|
public void addChild(ModelRenderer p_78792_1_)
|
|
{
|
|
if (this.childModels == null)
|
|
{
|
|
this.childModels = new ArrayList();
|
|
}
|
|
|
|
this.childModels.add(p_78792_1_);
|
|
}
|
|
|
|
public ModelRenderer setTextureOffset(int p_78784_1_, int p_78784_2_)
|
|
{
|
|
this.textureOffsetX = p_78784_1_;
|
|
this.textureOffsetY = p_78784_2_;
|
|
return this;
|
|
}
|
|
|
|
public ModelRenderer addBox(String p_78786_1_, float p_78786_2_, float p_78786_3_, float p_78786_4_, int p_78786_5_, int p_78786_6_, int p_78786_7_)
|
|
{
|
|
p_78786_1_ = this.boxName + "." + p_78786_1_;
|
|
TextureOffset textureoffset = this.baseModel.getTextureOffset(p_78786_1_);
|
|
this.setTextureOffset(textureoffset.textureOffsetX, textureoffset.textureOffsetY);
|
|
this.cubeList.add((new ModelBox(this, this.textureOffsetX, this.textureOffsetY, p_78786_2_, p_78786_3_, p_78786_4_, p_78786_5_, p_78786_6_, p_78786_7_, 0.0F)).func_78244_a(p_78786_1_));
|
|
return this;
|
|
}
|
|
|
|
public ModelRenderer addBox(float p_78789_1_, float p_78789_2_, float p_78789_3_, int p_78789_4_, int p_78789_5_, int p_78789_6_)
|
|
{
|
|
this.cubeList.add(new ModelBox(this, this.textureOffsetX, this.textureOffsetY, p_78789_1_, p_78789_2_, p_78789_3_, p_78789_4_, p_78789_5_, p_78789_6_, 0.0F));
|
|
return this;
|
|
}
|
|
|
|
/**
|
|
* Creates a textured box. Args: originX, originY, originZ, width, height, depth, scaleFactor.
|
|
*/
|
|
public void addBox(float p_78790_1_, float p_78790_2_, float p_78790_3_, int p_78790_4_, int p_78790_5_, int p_78790_6_, float p_78790_7_)
|
|
{
|
|
this.cubeList.add(new ModelBox(this, this.textureOffsetX, this.textureOffsetY, p_78790_1_, p_78790_2_, p_78790_3_, p_78790_4_, p_78790_5_, p_78790_6_, p_78790_7_));
|
|
}
|
|
|
|
public void setRotationPoint(float p_78793_1_, float p_78793_2_, float p_78793_3_)
|
|
{
|
|
this.rotationPointX = p_78793_1_;
|
|
this.rotationPointY = p_78793_2_;
|
|
this.rotationPointZ = p_78793_3_;
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public void render(float p_78785_1_)
|
|
{
|
|
if (!this.isHidden)
|
|
{
|
|
if (this.showModel)
|
|
{
|
|
if (!this.compiled)
|
|
{
|
|
this.compileDisplayList(p_78785_1_);
|
|
}
|
|
|
|
GL11.glTranslatef(this.offsetX, this.offsetY, this.offsetZ);
|
|
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)
|
|
{
|
|
((ModelRenderer)this.childModels.get(i)).render(p_78785_1_);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
GL11.glTranslatef(this.rotationPointX * p_78785_1_, this.rotationPointY * p_78785_1_, this.rotationPointZ * p_78785_1_);
|
|
GL11.glCallList(this.displayList);
|
|
|
|
if (this.childModels != null)
|
|
{
|
|
for (i = 0; i < this.childModels.size(); ++i)
|
|
{
|
|
((ModelRenderer)this.childModels.get(i)).render(p_78785_1_);
|
|
}
|
|
}
|
|
|
|
GL11.glTranslatef(-this.rotationPointX * p_78785_1_, -this.rotationPointY * p_78785_1_, -this.rotationPointZ * p_78785_1_);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslatef(this.rotationPointX * p_78785_1_, this.rotationPointY * p_78785_1_, this.rotationPointZ * p_78785_1_);
|
|
|
|
if (this.rotateAngleZ != 0.0F)
|
|
{
|
|
GL11.glRotatef(this.rotateAngleZ * (180F / (float)Math.PI), 0.0F, 0.0F, 1.0F);
|
|
}
|
|
|
|
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);
|
|
}
|
|
|
|
GL11.glCallList(this.displayList);
|
|
|
|
if (this.childModels != null)
|
|
{
|
|
for (i = 0; i < this.childModels.size(); ++i)
|
|
{
|
|
((ModelRenderer)this.childModels.get(i)).render(p_78785_1_);
|
|
}
|
|
}
|
|
|
|
GL11.glPopMatrix();
|
|
}
|
|
|
|
GL11.glTranslatef(-this.offsetX, -this.offsetY, -this.offsetZ);
|
|
}
|
|
}
|
|
}
|
|
|
|
@SideOnly(Side.CLIENT)
|
|
public void renderWithRotation(float p_78791_1_)
|
|
{
|
|
if (!this.isHidden)
|
|
{
|
|
if (this.showModel)
|
|
{
|
|
if (!this.compiled)
|
|
{
|
|
this.compileDisplayList(p_78791_1_);
|
|
}
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslatef(this.rotationPointX * p_78791_1_, this.rotationPointY * p_78791_1_, this.rotationPointZ * p_78791_1_);
|
|
|
|
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 p_78794_1_)
|
|
{
|
|
if (!this.isHidden)
|
|
{
|
|
if (this.showModel)
|
|
{
|
|
if (!this.compiled)
|
|
{
|
|
this.compileDisplayList(p_78794_1_);
|
|
}
|
|
|
|
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 * p_78794_1_, this.rotationPointY * p_78794_1_, this.rotationPointZ * p_78794_1_);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
GL11.glTranslatef(this.rotationPointX * p_78794_1_, this.rotationPointY * p_78794_1_, this.rotationPointZ * p_78794_1_);
|
|
|
|
if (this.rotateAngleZ != 0.0F)
|
|
{
|
|
GL11.glRotatef(this.rotateAngleZ * (180F / (float)Math.PI), 0.0F, 0.0F, 1.0F);
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Compiles a GL display list for this model
|
|
*/
|
|
@SideOnly(Side.CLIENT)
|
|
private void compileDisplayList(float p_78788_1_)
|
|
{
|
|
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)
|
|
{
|
|
((ModelBox)this.cubeList.get(i)).render(tessellator, p_78788_1_);
|
|
}
|
|
|
|
GL11.glEndList();
|
|
this.compiled = true;
|
|
}
|
|
|
|
/**
|
|
* Returns the model renderer with the new texture parameters.
|
|
*/
|
|
public ModelRenderer setTextureSize(int p_78787_1_, int p_78787_2_)
|
|
{
|
|
this.textureWidth = (float)p_78787_1_;
|
|
this.textureHeight = (float)p_78787_2_;
|
|
return this;
|
|
}
|
|
} |