Dartcraft/src/main/java/ley/modding/dartcraft/client/renderer/block/RenderTileForceEngine.java

135 lines
4.9 KiB
Java

package ley.modding.dartcraft.client.renderer.block;
import ley.modding.dartcraft.Dartcraft;
import ley.modding.dartcraft.client.model.ModelEngine;
import ley.modding.dartcraft.tile.TileEntityForceEngine;
import net.minecraft.client.model.ModelBase;
import net.minecraft.client.model.ModelRenderer;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import org.lwjgl.opengl.GL11;
public class RenderTileForceEngine extends TileEntitySpecialRenderer {
private static ModelRenderer base;
static ModelBase model = new ModelBase() {
};
static ModelRenderer piston;
static ModelRenderer extension;
static ModelRenderer[] trunk = new ModelRenderer[2];
static double[][] translate = new double[6][3];
public void
renderTileEntityAt(TileEntity tile, double x, double y, double z, float f) {
TileEntityForceEngine engine;
if (tile instanceof TileEntityForceEngine) {
engine = (TileEntityForceEngine) tile;
} else {
return;
}
render(
engine.isActive,
engine.getCycleProgress(),
engine.getFacing().ordinal(),
x,
y,
z
);
}
public void
render(boolean active, float progress, int facing, double x, double y, double z) {
float step;
GL11.glPushMatrix();
GL11.glTranslated(x, y, z);
if (progress > 1.0F)
progress = 1.0F;
if (progress > 0.5D) {
step = 8.0F - (progress - 0.5F) * 2.0F * 8.0F;
} else {
step = progress * 16.0F;
}
float translateFactor = step / 16.0F;
base.rotateAngleX = ModelEngine.angleBaseYNeg[facing][0];
base.rotateAngleY = ModelEngine.angleBaseYNeg[facing][1];
base.rotateAngleZ = ModelEngine.angleBaseYNeg[facing][2];
piston.rotateAngleX = ModelEngine.angleBaseYNeg[facing][0];
piston.rotateAngleY = ModelEngine.angleBaseYNeg[facing][1];
piston.rotateAngleZ = ModelEngine.angleBaseYNeg[facing][2];
extension.rotateAngleX = ModelEngine.angleBaseYNeg[facing][0];
extension.rotateAngleY = ModelEngine.angleBaseYNeg[facing][1];
extension.rotateAngleZ = ModelEngine.angleBaseYNeg[facing][2];
Dartcraft.proxy.bindTexture("forceEngine.png");
base.render(0.0625F);
GL11.glPushMatrix();
GL11.glTranslated(
translate[facing][0] * translateFactor,
translate[facing][1] * translateFactor,
translate[facing][2] * translateFactor
);
piston.render(0.0625F);
GL11.glPopMatrix();
if (active) {
(trunk[1]).rotateAngleX = ModelEngine.angleBaseYNeg[facing][0];
(trunk[1]).rotateAngleY = ModelEngine.angleBaseYNeg[facing][1];
(trunk[1]).rotateAngleZ = ModelEngine.angleBaseYNeg[facing][2];
trunk[1].render(0.0625F);
} else {
(trunk[0]).rotateAngleX = ModelEngine.angleBaseYNeg[facing][0];
(trunk[0]).rotateAngleY = ModelEngine.angleBaseYNeg[facing][1];
(trunk[0]).rotateAngleZ = ModelEngine.angleBaseYNeg[facing][2];
trunk[0].render(0.0625F);
}
float extensionFactor = 0.125F;
for (int i = 0; i < step + 2.0F; i += 2) {
extension.render(0.0625F);
GL11.glTranslated(
translate[facing][0] * extensionFactor,
translate[facing][1] * extensionFactor,
translate[facing][2] * extensionFactor
);
}
GL11.glPopMatrix();
}
static {
translate[0][1] = -1.0D;
translate[1][1] = 1.0D;
translate[2][2] = -1.0D;
translate[3][2] = 1.0D;
translate[4][0] = -1.0D;
translate[5][0] = 1.0D;
base = new ModelRenderer(model, 0, 0);
base.setTextureSize(128, 64);
base.addBox(-8.0F, -8.0F, -8.0F, 16, 4, 16);
base.rotationPointX = 8.0F;
base.rotationPointY = 8.0F;
base.rotationPointZ = 8.0F;
piston = new ModelRenderer(model, 64, 0);
piston.setTextureSize(128, 64);
piston.addBox(-7.0F, -4.0F, -7.0F, 14, 4, 14);
piston.rotationPointX = 8.0F;
piston.rotationPointY = 8.0F;
piston.rotationPointZ = 8.0F;
extension = new ModelRenderer(model, 0, 20);
extension.setTextureSize(128, 64);
extension.addBox(-5.0F, -4.5F, -5.0F, 10, 2, 10);
extension.rotationPointX = 8.0F;
extension.rotationPointY = 8.0F;
extension.rotationPointZ = 8.0F;
for (int i = 0; i < 2; i++) {
trunk[i] = new ModelRenderer(model, 32 * i, 44);
trunk[i].setTextureSize(128, 64);
trunk[i].addBox(-4.0F, -4.0F, -4.0F, 8, 12, 8);
(trunk[i]).rotationPointX = 8.0F;
(trunk[i]).rotationPointY = 8.0F;
(trunk[i]).rotationPointZ = 8.0F;
}
}
}