package openblocks.client.renderer.tileentity.guide; import net.minecraft.client.renderer.Tessellator; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.MathHelper; import net.minecraftforge.client.MinecraftForgeClient; import openblocks.common.tileentity.TileEntityBuilderGuide; import openmods.renderer.DisplayListWrapper; import org.lwjgl.opengl.GL11; public class TileEntityBuilderGuideRenderer extends TileEntityGuideRenderer { private static final float RADIUS = 0.4f; private static final double HALF_SIZE = 0.03; private static final float OMEGA_11 = 0.0413f; private static final float DELTA_11 = 0.5423f; private static final float OMEGA_12 = 0.0765f; private static final float DELTA_12 = 0.4241f; private static final float OMEGA_21 = 0.0543f; private static final float DELTA_21 = 0.1295f; private static final float OMEGA_22 = 0.0914f; private static final float DELTA_22 = 0.6532f; private static final float OMEGA_31 = 0.0624f; private static final float DELTA_31 = 0.6243f; private static final float OMEGA_32 = 0.0351f; private static final float DELTA_32 = 0.7635f; private DisplayListWrapper cube = new DisplayListWrapper() { @Override public void compile() { final Tessellator tes = new Tessellator(); tes.startDrawingQuads(); tes.addVertex(-HALF_SIZE, -HALF_SIZE, -HALF_SIZE); tes.addVertex(-HALF_SIZE, +HALF_SIZE, -HALF_SIZE); tes.addVertex(+HALF_SIZE, +HALF_SIZE, -HALF_SIZE); tes.addVertex(+HALF_SIZE, -HALF_SIZE, -HALF_SIZE); tes.addVertex(-HALF_SIZE, -HALF_SIZE, +HALF_SIZE); tes.addVertex(+HALF_SIZE, -HALF_SIZE, +HALF_SIZE); tes.addVertex(+HALF_SIZE, +HALF_SIZE, +HALF_SIZE); tes.addVertex(-HALF_SIZE, +HALF_SIZE, +HALF_SIZE); tes.addVertex(-HALF_SIZE, -HALF_SIZE, -HALF_SIZE); tes.addVertex(-HALF_SIZE, -HALF_SIZE, +HALF_SIZE); tes.addVertex(-HALF_SIZE, +HALF_SIZE, +HALF_SIZE); tes.addVertex(-HALF_SIZE, +HALF_SIZE, -HALF_SIZE); tes.addVertex(+HALF_SIZE, -HALF_SIZE, -HALF_SIZE); tes.addVertex(+HALF_SIZE, +HALF_SIZE, -HALF_SIZE); tes.addVertex(+HALF_SIZE, +HALF_SIZE, +HALF_SIZE); tes.addVertex(+HALF_SIZE, -HALF_SIZE, +HALF_SIZE); tes.addVertex(-HALF_SIZE, -HALF_SIZE, -HALF_SIZE); tes.addVertex(+HALF_SIZE, -HALF_SIZE, -HALF_SIZE); tes.addVertex(+HALF_SIZE, -HALF_SIZE, +HALF_SIZE); tes.addVertex(-HALF_SIZE, -HALF_SIZE, +HALF_SIZE); tes.addVertex(-HALF_SIZE, +HALF_SIZE, -HALF_SIZE); tes.addVertex(-HALF_SIZE, +HALF_SIZE, +HALF_SIZE); tes.addVertex(+HALF_SIZE, +HALF_SIZE, +HALF_SIZE); tes.addVertex(+HALF_SIZE, +HALF_SIZE, -HALF_SIZE); tes.draw(); } }; @Override public void renderTileEntityAt(TileEntity te, double x, double y, double z, float partialTickTime) { if (MinecraftForgeClient.getRenderPass() == 0) { GL11.glPushMatrix(); GL11.glTranslated(x + 0.5, y + 0.5, z + 0.5); renderCubes(((TileEntityBuilderGuide)te).getTicks() + partialTickTime); GL11.glPopMatrix(); } else { super.renderTileEntityAt(te, x, y, z, partialTickTime); } } private void renderCubes(float time) { GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_TEXTURE_2D); GL11.glColor3ub((byte)0x06, (byte)0x23, (byte)0x20); GL11.glPushMatrix(); { float theta = 360 * MathHelper.sin(OMEGA_11 * time + DELTA_11); float phi = 360 * MathHelper.sin(OMEGA_12 * time + DELTA_12); drawCube(theta, phi); } GL11.glPopMatrix(); GL11.glPushMatrix(); { float theta = 360 * MathHelper.sin(OMEGA_21 * time + DELTA_21); float phi = 360 * MathHelper.sin(OMEGA_22 * time + DELTA_22); drawCube(theta, phi); } GL11.glPopMatrix(); { float theta = 360 * MathHelper.sin(OMEGA_31 * time + DELTA_31); float phi = 360 * MathHelper.sin(OMEGA_32 * time + DELTA_32); drawCube(theta, phi); } GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glDisable(GL11.GL_LIGHTING); } protected void drawCube(float theta, float phi) { GL11.glRotatef(theta, 0, 1, 0); GL11.glRotatef(phi, 0, 0, 1); GL11.glTranslatef(RADIUS, 0, 0); cube.render(); } }