mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
133 lines
3.7 KiB
Java
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);
|
|
}
|
|
}
|
|
}
|
|
}
|