mirror of
https://github.com/HbmMods/Hbm-s-Nuclear-Tech-GIT.git
synced 2026-01-25 10:32:49 +00:00
278 lines
8.5 KiB
Java
278 lines
8.5 KiB
Java
package com.hbm.render.tileentity;
|
|
|
|
import org.lwjgl.opengl.GL11;
|
|
|
|
import com.hbm.blocks.BlockDummyable;
|
|
import com.hbm.main.ResourceManager;
|
|
import com.hbm.util.BobMathUtil;
|
|
|
|
import net.minecraft.client.Minecraft;
|
|
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
|
|
import net.minecraft.tileentity.TileEntity;
|
|
|
|
public class RenderLPW2 extends TileEntitySpecialRenderer {
|
|
|
|
@Override
|
|
public void renderTileEntityAt(TileEntity te, double x, double y, double z, float interp) {
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(x + 0.5, y, z + 0.5);
|
|
|
|
GL11.glEnable(GL11.GL_CULL_FACE);
|
|
GL11.glEnable(GL11.GL_LIGHTING);
|
|
GL11.glShadeModel(GL11.GL_SMOOTH);
|
|
|
|
switch(te.getBlockMetadata() - BlockDummyable.offset) {
|
|
case 2: GL11.glRotatef(90, 0F, 1F, 0F); break;
|
|
case 4: GL11.glRotatef(180, 0F, 1F, 0F); break;
|
|
case 3: GL11.glRotatef(270, 0F, 1F, 0F); break;
|
|
case 5: GL11.glRotatef(0, 0F, 1F, 0F); break;
|
|
}
|
|
|
|
long time = te.getWorldObj().getTotalWorldTime();
|
|
|
|
double swayTimer = ((time + interp) / 3D) % (Math.PI * 4);
|
|
double sway = (Math.sin(swayTimer) + Math.sin(swayTimer * 2) + Math.sin(swayTimer * 4) + 2.23255D) * 0.5;
|
|
|
|
double bellTimer = ((time + interp) / 5D) % (Math.PI * 4);
|
|
double h = (Math.sin(bellTimer + Math.PI) + Math.sin(bellTimer * 1.5D)) / 1.90596D;
|
|
double v = (Math.sin(bellTimer) + Math.sin(bellTimer * 1.5D)) / 1.90596D;
|
|
|
|
double pistonTimer = ((time + interp) / 5D) % (Math.PI * 2);
|
|
double piston = BobMathUtil.sps(pistonTimer);
|
|
double rotorTimer = ((time + interp) / 5D) % (Math.PI * 16);
|
|
double rotor = (BobMathUtil.sps(rotorTimer) + rotorTimer / 2D - 1) / 25.1327412287D;
|
|
double turbine = ((time + interp) % 100) / 100D;
|
|
|
|
bindTexture(ResourceManager.lpw2_tex);
|
|
ResourceManager.lpw2.renderPart("Frame");
|
|
|
|
renderMainAssembly(sway, h, v, piston, rotor, turbine);
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(-2.9375, 0, 2.375);
|
|
GL11.glRotated(sway * 10, 0, 1, 0);
|
|
GL11.glTranslated(2.9375, 0, -2.375);
|
|
ResourceManager.lpw2.renderPart("WireLeft");
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(2.9375, 0, 2.375);
|
|
GL11.glRotated(sway * -10, 0, 1, 0);
|
|
GL11.glTranslated(-2.9375, 0, -2.375);
|
|
ResourceManager.lpw2.renderPart("WireRight");
|
|
GL11.glPopMatrix();
|
|
|
|
double coverTimer = ((time + interp) / 5D) % (Math.PI * 4);
|
|
double cover = (Math.sin(coverTimer) + Math.sin(coverTimer * 2) + Math.sin(coverTimer * 4)) * 0.5;
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(0, 0, -cover * 0.125);
|
|
ResourceManager.lpw2.renderPart("Cover");
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(0, 0, 3.5);
|
|
GL11.glScaled(1, 1, (3 + cover * 0.125) / 3);
|
|
GL11.glTranslated(0, 0, -3.5);
|
|
ResourceManager.lpw2.renderPart("SuspensionCoverFront");
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(0, 0, -5.5);
|
|
GL11.glScaled(1, 1, (1.5 - cover * 0.125) / 1.5);
|
|
GL11.glTranslated(0, 0, 5.5);
|
|
ResourceManager.lpw2.renderPart("SuspensionCoverBack");
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(0, 0, -9);
|
|
GL11.glScaled(1, 1, (1.25 - sway * 0.125) / 1.25);
|
|
GL11.glTranslated(0, 0, 9);
|
|
ResourceManager.lpw2.renderPart("SuspensionBackOuter");
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(0, 0, -9.5);
|
|
GL11.glScaled(1, 1, (1.75 - sway * 0.125) / 1.75);
|
|
GL11.glTranslated(0, 0, 9.5);
|
|
ResourceManager.lpw2.renderPart("SuspensionBackCenter");
|
|
GL11.glPopMatrix();
|
|
|
|
double serverTimer = ((time + interp) / 2D) % (Math.PI * 4);
|
|
double sx = (Math.sin(serverTimer + Math.PI) + Math.sin(serverTimer * 1.5D)) / 1.90596D;
|
|
double sy = (Math.sin(serverTimer) + Math.sin(serverTimer * 1.5D)) / 1.90596D;
|
|
|
|
double serverSway = 0.0625D * 0.25D;
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(sx * serverSway, 0, sy * serverSway);
|
|
ResourceManager.lpw2.renderPart("Server1");
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(-sy * serverSway, 0, sx * serverSway);
|
|
ResourceManager.lpw2.renderPart("Server2");
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(sy * serverSway, 0, -sx * serverSway);
|
|
ResourceManager.lpw2.renderPart("Server3");
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(-sx * serverSway, 0, -sy * serverSway);
|
|
ResourceManager.lpw2.renderPart("Server4");
|
|
GL11.glPopMatrix();
|
|
|
|
double errorTimer = ((time + interp) / 3D);
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(sy * serverSway, 0, sx * serverSway);
|
|
|
|
ResourceManager.lpw2.renderPart("Monitor");
|
|
|
|
/*Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.lpw2_term_tex);
|
|
ResourceManager.lpw2.renderPart("Screen");*/
|
|
|
|
Minecraft.getMinecraft().getTextureManager().bindTexture(ResourceManager.lpw2_error_tex);
|
|
|
|
GL11.glMatrixMode(GL11.GL_TEXTURE);
|
|
GL11.glLoadIdentity();
|
|
GL11.glTranslated(0, BobMathUtil.sps(errorTimer) + errorTimer / 2D - 1, 0);
|
|
ResourceManager.lpw2.renderPart("Screen");
|
|
GL11.glMatrixMode(GL11.GL_TEXTURE);
|
|
GL11.glLoadIdentity();
|
|
GL11.glMatrixMode(GL11.GL_MODELVIEW);
|
|
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glShadeModel(GL11.GL_FLAT);
|
|
GL11.glPopMatrix();
|
|
}
|
|
|
|
public static void renderMainAssembly(double sway, double h, double v, double piston, double rotor, double turbine) {
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(0, 0, -sway * 0.125);
|
|
ResourceManager.lpw2.renderPart("Center");
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(0, 3.5, 0);
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glRotated(rotor * 360, 0, 0, -1);
|
|
GL11.glTranslated(0, -3.5, 0);
|
|
ResourceManager.lpw2.renderPart("Rotor");
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glRotated(turbine * 360, 0, 0, 1);
|
|
GL11.glTranslated(0, -3.5, 0);
|
|
ResourceManager.lpw2.renderPart("TurbineFront");
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glRotated(turbine * 360, 0, 0, -1);
|
|
GL11.glTranslated(0, -3.5, 0);
|
|
ResourceManager.lpw2.renderPart("TurbineBack");
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(0, 0, piston * 0.375D + 0.375D);
|
|
ResourceManager.lpw2.renderPart("Piston");
|
|
GL11.glPopMatrix();
|
|
|
|
renderBell(h, v);
|
|
GL11.glPopMatrix();
|
|
|
|
renderShroud(h, v);
|
|
}
|
|
|
|
public static void renderBell(double h, double v) {
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(0, 3.5, 2.75);
|
|
double magnitude = 2D;
|
|
GL11.glRotated(v * magnitude, 0, 1, 0);
|
|
GL11.glRotated(h * magnitude, 1, 0, 0);
|
|
GL11.glTranslated(0, -3.5, -2.75);
|
|
ResourceManager.lpw2.renderPart("Engine");
|
|
GL11.glPopMatrix();
|
|
}
|
|
|
|
public static void renderShroud(double h, double v) {
|
|
|
|
double magnitude = 0.125D;
|
|
double rotation = 5D;
|
|
double offset = 10D;
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(0, -h * magnitude, 0);
|
|
ResourceManager.lpw2.renderPart("ShroudH");
|
|
|
|
renderFlap(90 + 22.5D, rotation * v + offset);
|
|
renderFlap(90 - 22.5D, rotation * v + offset);
|
|
renderFlap(270 + 22.5D, rotation * -v + offset);
|
|
renderFlap(270 - 22.5D, rotation * -v + offset);
|
|
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(v * magnitude, 0, 0);
|
|
ResourceManager.lpw2.renderPart("ShroudV");
|
|
|
|
renderFlap(22.5D, rotation * h + offset);
|
|
renderFlap(-22.5D, rotation * h + offset);
|
|
renderFlap(180 + 22.5D, rotation * -h + offset);
|
|
renderFlap(180 - 22.5D, rotation * -h + offset);
|
|
|
|
GL11.glPopMatrix();
|
|
|
|
double length = 0.6875D;
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(-2.625D, 0, 0);
|
|
GL11.glScaled((length + v * magnitude) / length, 1, 1);
|
|
GL11.glTranslated(2.625D, 0, 0);
|
|
ResourceManager.lpw2.renderPart("SuspensionLeft");
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(2.625D, 0, 0);
|
|
GL11.glScaled((length - v * magnitude) / length, 1, 1);
|
|
GL11.glTranslated(-2.625D, 0, 0);
|
|
ResourceManager.lpw2.renderPart("SuspensionRight");
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(0, 6.125D, 0);
|
|
GL11.glScaled(1, (length + h * magnitude) / length, 1);
|
|
GL11.glTranslated(0, -6.125D, 0);
|
|
ResourceManager.lpw2.renderPart("SuspensionTop");
|
|
GL11.glPopMatrix();
|
|
|
|
GL11.glPushMatrix();
|
|
GL11.glTranslated(0, 0.875D, 0);
|
|
GL11.glScaled(1, (length - h * magnitude) / length, 1);
|
|
GL11.glTranslated(0, -0.875D, 0);
|
|
ResourceManager.lpw2.renderPart("SuspensionBottom");
|
|
GL11.glPopMatrix();
|
|
}
|
|
|
|
public static void renderFlap(double position, double rotation) {
|
|
GL11.glPushMatrix();
|
|
|
|
GL11.glTranslated(0, 3.5D, 0);
|
|
GL11.glRotated(position, 0, 0, 1);
|
|
GL11.glTranslated(0, -3.5D, 0);
|
|
|
|
GL11.glTranslated(0, 6.96875D, 8.5D);
|
|
GL11.glRotated(rotation, 1, 0, 0);
|
|
GL11.glTranslated(0, -6.96875D, -8.5D);
|
|
|
|
ResourceManager.lpw2.renderPart("Flap");
|
|
GL11.glPopMatrix();
|
|
}
|
|
}
|