2023-08-05 16:33:23 +02:00

133 lines
3.7 KiB
Java

package com.hbm.render.loader;
import org.lwjgl.opengl.GL11;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
import net.minecraft.client.model.ModelRenderer;
import net.minecraftforge.client.model.IModelCustom;
public class ModelRendererObj {
public float rotationPointX;
public float rotationPointY;
public float rotationPointZ;
public float originPointX;
public float originPointY;
public float originPointZ;
public float rotateAngleX;
public float rotateAngleY;
public float rotateAngleZ;
public float offsetX;
public float offsetY;
public float offsetZ;
String[] parts;
IModelCustom model;
public ModelRendererObj(IModelCustom model, String... parts) {
this.model = model;
this.parts = parts;
}
public ModelRendererObj setPosition(float x, float y, float z) {
this.offsetX = x;
this.offsetY = y;
this.offsetZ = z;
return this;
}
public ModelRendererObj setRotationPoint(float x, float y, float z) {
this.originPointX = this.rotationPointX = x;
this.originPointY = this.rotationPointY = y;
this.originPointZ = this.rotationPointZ = z;
return this;
}
public void copyTo(ModelRendererObj obj) {
obj.offsetX = offsetX;
obj.offsetY = offsetY;
obj.offsetZ = offsetZ;
obj.rotateAngleX = rotateAngleX;
obj.rotateAngleY = rotateAngleY;
obj.rotateAngleZ = rotateAngleZ;
obj.rotationPointX = rotationPointX;
obj.rotationPointY = rotationPointY;
obj.rotationPointZ = rotationPointZ;
}
public void copyRotationFrom(ModelRenderer model) {
/*offsetX = model.offsetX;
offsetY = model.offsetY;
offsetZ = model.offsetZ;*/
rotateAngleX = model.rotateAngleX;
rotateAngleY = model.rotateAngleY;
rotateAngleZ = model.rotateAngleZ;
/*rotationPointX = model.rotationPointX;
rotationPointY = model.rotationPointY;
rotationPointZ = model.rotationPointZ;*/
}
@SideOnly(Side.CLIENT)
public void render(float scale) {
if(parts == null)
return;
GL11.glPushMatrix();
GL11.glTranslatef(this.offsetX * scale, this.offsetY * scale, this.offsetZ * scale);
GL11.glTranslatef(this.rotationPointX * scale, this.rotationPointY * scale, this.rotationPointZ * scale);
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.glTranslatef(-this.rotationPointX * scale, -this.rotationPointY * scale, -this.originPointZ * scale); //yes, that is correct
GL11.glScalef(scale, scale, scale);
if(parts.length > 0)
for(String part : parts)
model.renderPart(part);
else
model.renderAll();
GL11.glPopMatrix();
}
@SideOnly(Side.CLIENT)
public void postRender(float 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);
}
}
}
}