This repository has been archived on 2022-11-23. You can view files and clone it, but cannot push or open issues or pull requests.
arcane-seals/src/main/java/net/anvilcraft/arcaneseals/render/TileSealRenderer.java

239 lines
9.4 KiB
Java

package net.anvilcraft.arcaneseals.render;
import net.anvilcraft.arcaneseals.ASBlocks;
import net.anvilcraft.arcaneseals.tiles.TileSeal;
import net.anvilcraft.arcaneseals.utils.UtilsFX;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.util.ResourceLocation;
import org.lwjgl.opengl.GL11;
public class TileSealRenderer extends TileEntitySpecialRenderer {
private float bob = 0.0F;
private int count = 0;
private static int[] colors
= new int[] { 13532671, 16777088, 8421631, 8454016, 16744576, 4194368 };
private void translateFromOrientation(double x, double y, double z, int orientation) {
GL11.glPushMatrix();
if (orientation == 0) {
GL11.glTranslatef((float) x, (float) y + 1.0F, (float) z + 1.0F);
GL11.glRotatef(-90.0F, 1.0F, 0.0F, 0.0F);
} else if (orientation == 1) {
GL11.glTranslatef((float) x, (float) y, (float) z);
GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F);
} else if (orientation == 2) {
GL11.glTranslatef((float) x, (float) y, (float) z + 1.0F);
} else if (orientation == 3) {
GL11.glTranslatef((float) x + 1.0F, (float) y, (float) z);
GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F);
} else if (orientation == 4) {
GL11.glTranslatef((float) x + 1.0F, (float) y, (float) z + 1.0F);
GL11.glRotatef(90.0F, 0.0F, 1.0F, 0.0F);
} else if (orientation == 5) {
GL11.glTranslatef((float) x, (float) y, (float) z);
GL11.glRotatef(-90.0F, 0.0F, 1.0F, 0.0F);
}
}
private void drawSeal(float angle, int level, int rune) {
Tessellator tessellator = Tessellator.instance;
GL11.glRotatef(90.0F, -1.0F, 0.0F, 0.0F);
GL11.glRotatef(angle, 0.0F, 1.0F, 0.0F);
GL11.glTranslatef(-0.5F, 0.0F, -0.5F);
GL11.glDepthMask(false);
GL11.glEnable(3042);
GL11.glBlendFunc(770, 1);
if (level != 2) {
Minecraft.getMinecraft().getTextureManager().bindTexture(new ResourceLocation(
"arcaneseals", "textures/misc/s_" + level + "_" + rune + ".png"
));
} else {
Minecraft.getMinecraft().getTextureManager().bindTexture(
new ResourceLocation("arcaneseals", "textures/misc/seal5.png")
);
}
GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
tessellator.startDrawingQuads();
tessellator.setBrightness(220);
if (level == 2) {
tessellator.setColorRGBA_I(colors[rune], 255);
}
tessellator.addVertexWithUV(0.0, 0.0, 1.0, 0.0, 1.0);
tessellator.addVertexWithUV(1.0, 0.0, 1.0, 1.0, 1.0);
tessellator.addVertexWithUV(1.0, 0.0, 0.0, 1.0, 0.0);
tessellator.addVertexWithUV(0.0, 0.0, 0.0, 0.0, 0.0);
tessellator.draw();
GL11.glDisable(3042);
GL11.glDepthMask(true);
}
// TODO: portal rendering
//private void drawPortal(TileSeal seal, float angle, double x, double y, double z) {
// Tessellator tessellator = Tessellator.instance;
// Minecraft mc = ModLoader.getMinecraftInstance();
// GL11.glDisable(2896);
// if (Config.portalGfx && seal.txRender != null
// && PortalRenderer.renderRecursion < 2) {
// GL11.glPushMatrix();
// GL11.glDisable(3553);
// GL11.glColor4f(
// ThaumCraftCore.fColorR(),
// ThaumCraftCore.fColorG(),
// ThaumCraftCore.fColorB(),
// 1.0F
// );
// tessellator.setBrightness(220);
// GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F);
// GL11.glScaled(
// (double) (seal.pSize / 2.0F),
// (double) (seal.pSize / 2.0F),
// (double) (seal.pSize / 2.0F)
// );
// GL11.glBegin(6);
// GL11.glVertex2f(0.0F, 0.0F);
// for (int oh = 0; oh <= 10; ++oh) {
// double aa = 6.283185307179586 * (double) oh / 10.0;
// GL11.glVertex2f((float) Math.cos(aa), (float) Math.sin(aa));
// }
// GL11.glEnd();
// GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
// GL11.glPopMatrix();
// GL11.glEnable(3553);
// GL11.glPushMatrix();
// GL11.glDisable(2896);
// GL11.glEnable(3042);
// GL11.glBlendFunc(770, 771);
// GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F);
// GL11.glRotatef(180.0F, 0.0F, 1.0F, 0.0F);
// GL11.glTranslatef(-seal.pSize / 2.0F, -0.01F, -seal.pSize / 2.0F);
// GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
// GL11.glBindTexture(3553, seal.txRender.portalTexture);
// tessellator.startDrawingQuads();
// tessellator.setBrightness(220);
// tessellator.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F);
// tessellator.addVertexWithUV(0.0, 0.0, 0.0, 0.0, 0.0);
// tessellator.addVertexWithUV((double) seal.pSize, 0.0, 0.0, 1.0, 0.0);
// tessellator.addVertexWithUV(
// (double) seal.pSize, 0.0, (double) seal.pSize, 1.0, 1.0
// );
// tessellator.addVertexWithUV(0.0, 0.0, (double) seal.pSize, 0.0, 1.0);
// tessellator.draw();
// GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
// GL11.glDisable(3042);
// GL11.glPopMatrix();
// }
// GL11.glPushMatrix();
// GL11.glRotatef(90.0F, -1.0F, 0.0F, 0.0F);
// GL11.glRotatef(angle, 0.0F, 1.0F, 0.0F);
// GL11.glTranslatef(-seal.pSize, 0.02F, -seal.pSize);
// GL11.glDepthMask(false);
// GL11.glEnable(3042);
// GL11.glBlendFunc(770, 771);
// if (Config.portalGfx && seal.txRender != null) {
// MinecraftForgeClient.bindTexture("/thaumcraft/resources/portal2.png");
// } else {
// MinecraftForgeClient.bindTexture("/thaumcraft/resources/portal.png");
// }
// tessellator.startDrawingQuads();
// tessellator.setBrightness(220);
// tessellator.setColorRGBA_F(1.0F, 1.0F, 1.0F, 1.0F);
// tessellator.addVertexWithUV(0.0, 0.0, (double) (seal.pSize * 2.0F), 0.0, 1.0);
// tessellator.addVertexWithUV(
// (double) (seal.pSize * 2.0F), 0.0, (double) (seal.pSize * 2.0F), 1.0, 1.0
// );
// tessellator.addVertexWithUV((double) (seal.pSize * 2.0F), 0.0, 0.0, 1.0, 0.0);
// tessellator.addVertexWithUV(0.0, 0.0, 0.0, 0.0, 0.0);
// tessellator.draw();
// GL11.glDisable(3042);
// GL11.glDepthMask(true);
// GL11.glPopMatrix();
// GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F);
// GL11.glEnable(2896);
// GL11.glPopMatrix();
// GL11.glPopMatrix();
//}
public void renderEntityAt(TileSeal seal, double x, double y, double z, float fq) {
int a = this.count % 360;
Minecraft mc = Minecraft.getMinecraft();
this.translateFromOrientation(
(double) ((float) x),
(double) ((float) y),
(double) ((float) z),
seal.orientation
);
GL11.glTranslatef(0.33F, 0.33F, -0.01F);
GL11.glScalef(0.33f, 0.33f, 0.33f);
mc.getTextureManager().bindTexture(TextureMap.locationBlocksTexture);
IIcon icon = ASBlocks.seal.getIcon(0, 0);
UtilsFX.renderItemIn2D(
Tessellator.instance,
icon.getMaxU(),
icon.getMinV(),
icon.getMinU(),
icon.getMaxV(),
icon.getIconWidth(),
icon.getIconHeight(),
0.0625f,
128
);
GL11.glPopMatrix();
this.translateFromOrientation(
(double) ((float) x),
(double) ((float) y),
(double) ((float) z),
seal.orientation
);
if (seal.runes[0] != -1) {
GL11.glPushMatrix();
GL11.glTranslatef(0.5F, 0.5F, -0.02f);
this.drawSeal(180.0F, 0, seal.runes[0]);
GL11.glPopMatrix();
}
if (seal.runes[1] != -1) {
GL11.glPushMatrix();
GL11.glTranslatef(0.5F, 0.5F, -0.03f);
this.drawSeal((float) (-a), 1, seal.runes[1]);
GL11.glPopMatrix();
}
if (seal.runes[2] != -1) {
GL11.glPushMatrix();
GL11.glTranslatef(0.5F, 0.5F, -0.03f - this.bob);
this.drawSeal((float) a, 2, seal.runes[2]);
GL11.glPopMatrix();
}
// TODO: portal rendering
//if (seal.runes[0] == 0 && seal.runes[1] == 1 && seal.pSize > 0.0F) {
// GL11.glPushMatrix();
// GL11.glPushMatrix();
// GL11.glTranslatef(0.5F, 0.5F, -seal.pSize / 5.0F);
// this.drawPortal(seal, (float) (-a * 4), x, y, z);
// nopush = false;
//}
GL11.glPopMatrix();
}
public void
renderTileEntityAt(TileEntity tileentity, double d, double d1, double d2, float f) {
this.count = Minecraft.getMinecraft().thePlayer.ticksExisted;
this.bob = MathHelper.sin((float) this.count / 10.0F) * 0.025F + 0.03F;
this.renderEntityAt((TileSeal) tileentity, d, d1, d2, f);
}
}