package com.cricketcraft.chisel.client.render;
import net.minecraft.block.Block;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.client.renderer.Tessellator;
import net.minecraft.util.IIcon;
public class RenderBlocksEldritch extends RenderBlocks {
RenderBlocksEldritch() {
super();
}
static double displacementMap[] = { +0.1165, -0.0352, -0.1208, +0.0906, -0.0295, +0.0302, -0.0973, +0.0548, -0.1077, +0.0662, -0.0932, -0.0925, -0.1161, +0.0073, -0.1084, +0.1136, +0.0307,
+0.0316, -0.1066, -0.0237, +0.0614, -0.0864, +0.0837, +0.1218, +0.0502, -0.0529, -0.0942, +0.1209, -0.0418, +0.1035, +0.0066, -0.0255, +0.0830, -0.0361, +0.0965, +0.0646, +0.1124,
+0.0890, -0.0037, +0.0467, +0.1025, +0.1161, +0.0014, +0.0365, +0.0755, -0.0025, +0.0739, +0.0656, +0.0571, -0.0813, -0.0062, -0.0904, -0.0005, +0.0612, -0.0227, +0.0138, -0.0899,
-0.0019, -0.1047, +0.1191, -0.1197, -0.1123, +0.0999, +0.0638, +0.0865, +0.0029, -0.0084, +0.1132, -0.0433, +0.0115, +0.0850, +0.0439, +0.0748, +0.0460, -0.0441, +0.0839, +0.0162,
-0.0229, +0.0774, -0.0647, -0.0636, -0.0709, -0.0719, -0.0194, +0.1070, -0.0466, -0.1200, -0.0996, -0.0298, -0.1035, -0.0006, +0.0530, -0.0939, -0.1210, +0.0176, +0.0924, +0.0343,
-0.0777, +0.1050, -0.0729, -0.0062, -0.1107, -0.0434, -0.0042, +0.0232, +0.0269, +0.0709, -0.0388, +0.0342, +0.0240, -0.0192, +0.0491, +0.0017, -0.1240, +0.0687, -0.1160, +0.1123,
-0.0332, -0.0260, +0.0476, -0.0049, -0.0893, -0.0243, -0.0371, -0.0230, +0.0656, +0.1080, +0.0781, -0.0648, +0.0082, -0.1086, -0.0451, -0.0594, -0.1155, -0.0623, -0.0152, +0.0131,
-0.0754, +0.0607, +0.0876, -0.0657, +0.0366, -0.0981, +0.1164, -0.0623, +0.0181, -0.0475, +0.0722, -0.0293, +0.0486, -0.0195, +0.1041, +0.1011, +0.0042, -0.0045, -0.1031, +0.0110,
+0.0058, +0.0083, -0.0782, -0.1003, -0.0082, -0.0304, -0.0971, -0.0097, -0.0208, -0.1059, -0.0239, -0.0385, +0.0505, +0.0537, -0.1098, -0.0022, -0.0165, -0.0027, -0.0208, +0.0305,
+0.0592, +0.0301, +0.0055, +0.1138, -0.0338, -0.0901, +0.1015, +0.0061, +0.0861, -0.1057, -0.0889, -0.0972, +0.0783, -0.1052, -0.0932, -0.1103, +0.0497, +0.1222, -0.0146, +0.0632,
-0.0240, -0.0193, +0.0676, -0.1128, -0.0886, +0.0926, +0.0538, -0.0175, -0.0966, -0.0369, +0.1124, -0.0820, -0.1013, -0.0836, -0.0981, -0.0502, +0.0573, +0.0616, -0.0458, +0.0294,
+0.0108, -0.0782, +0.0692, +0.0234, -0.0178, -0.0171, -0.0505, -0.0313, +0.0538, +0.0462, -0.0758, +0.0556, -0.0023, -0.1086, -0.0100, -0.0897, -0.0409, -0.1161, +0.0212, +0.1229,
-0.0945, +0.0341, +0.1238, +0.0893, -0.1189, -0.1098, -0.0125, +0.1137, -0.0202, +0.0239, -0.0408, +0.0920, +0.0777, -0.0085, -0.0572, -0.0293, -0.0131, +0.0272, +0.0991, };
static int dmap1 = displacementMap.length * 1 / 6;
static int dmap2 = displacementMap.length * 2 / 6;
static int dmap3 = displacementMap.length * 3 / 6;
static int dmap4 = displacementMap.length * 4 / 6;
static int dmap5 = displacementMap.length * 5 / 6;
static int dmap = displacementMap.length;
Tessellator tessellator;
double[] X = new double[14];
double[] Y = new double[14];
double[] Z = new double[14];
double[] U = new double[14];
double[] V = new double[14];
int[] L = new int[14];
float[] R = new float[14];
float[] G = new float[14];
float[] B = new float[14];
@Override
public boolean renderStandardBlock(Block block, int x, int y, int z) {
int index = x + y * 34573 + z * 32465781;
if (index < 0)
index = -index;
X[0] = x;
Z[0] = z;
Y[0] = y;
X[1] = x;
Z[1] = z;
Y[1] = y + 1;
X[2] = x + 1;
Z[2] = z;
Y[2] = y + 1;
X[3] = x + 1;
Z[3] = z;
Y[3] = y;
X[4] = x;
Z[4] = z + 1;
Y[4] = y;
X[5] = x;
Z[5] = z + 1;
Y[5] = y + 1;
X[6] = x + 1;
Z[6] = z + 1;
Y[6] = y + 1;
X[7] = x + 1;
Z[7] = z + 1;
Y[7] = y;
X[8] = x + 0.5 + displacementMap[(index + 0) % dmap];
Z[8] = z - displacementMap[(index + 10) % dmap];
Y[8] = y + 0.5 + displacementMap[(index + 20) % dmap];
X[9] = x - displacementMap[(index + 0 + dmap1) % dmap];
Z[9] = z + 0.5 + displacementMap[(index + 10 + dmap1) % dmap];
Y[9] = y + 0.5 + displacementMap[(index + 20 + dmap1) % dmap];
X[10] = x + 0.5 + displacementMap[(index + 0 + dmap2) % dmap];
Z[10] = z + 1 + displacementMap[(index + 10 + dmap2) % dmap];
Y[10] = y + 0.5 + displacementMap[(index + 20 + dmap2) % dmap];
X[11] = x + 1 + displacementMap[(index + 0 + dmap3) % dmap];
Z[11] = z + 0.5 + displacementMap[(index + 10 + dmap3) % dmap];
Y[11] = y + 0.5 + displacementMap[(index + 20 + dmap3) % dmap];
X[12] = x + 0.5 + displacementMap[(index + 0 + dmap4) % dmap];
Z[12] = z + 0.5 + displacementMap[(index + 10 + dmap4) % dmap];
Y[12] = y + 1;// +displacementMap[(index+20+dmap4)%dmap];
X[13] = x + 0.5 + displacementMap[(index + 0 + dmap5) % dmap];
Z[13] = z + 0.5 + displacementMap[(index + 10 + dmap5) % dmap];
Y[13] = y + 0;// +displacementMap[(index+20+dmap5)%dmap];
tessellator = Tessellator.instance;
tessellator.setColorOpaque_F(1.0F, 1.0F, 1.0F);
return super.renderStandardBlock(block, x, y, z);
}
void setupSides(IIcon icon, int a, int b, int c, int d, int e, int ta, int tb, int tc, int td) {
L[a] = brightnessBottomLeft;
L[b] = brightnessBottomRight;
L[c] = brightnessTopRight;
L[d] = brightnessTopLeft;
L[e] = (brightnessBottomLeft + brightnessTopLeft + brightnessTopRight + brightnessBottomRight) / 4;
R[a] = colorRedBottomLeft;
R[b] = colorRedBottomRight;
R[c] = colorRedTopRight;
R[d] = colorRedTopLeft;
R[e] = (colorRedBottomLeft + colorRedTopLeft + colorRedTopRight + colorRedBottomRight) / 4;
G[a] = colorGreenBottomLeft;
G[b] = colorGreenBottomRight;
G[c] = colorGreenTopRight;
G[d] = colorGreenTopLeft;
G[e] = (colorGreenBottomLeft + colorGreenTopLeft + colorGreenTopRight + colorGreenBottomRight) / 4;
B[a] = colorBlueBottomLeft;
B[b] = colorBlueBottomRight;
B[c] = colorBlueTopRight;
B[d] = colorBlueTopLeft;
B[e] = (colorBlueBottomLeft + colorBlueTopLeft + colorBlueTopRight + colorBlueBottomRight) / 4;
double u0 = icon.getMaxU();
double u1 = icon.getMinU();
double v0 = icon.getMaxV();
double v1 = icon.getMinV();
U[ta] = u0;
U[tb] = u0;
U[tc] = u1;
U[td] = u1;
U[e] = icon.getInterpolatedU(8.0D);
V[ta] = v0;
V[tb] = v1;
V[tc] = v1;
V[td] = v0;
V[e] = icon.getInterpolatedV(8.0D);
}
void vert(int index) {
if (enableAO) {
tessellator.setColorOpaque_F(R[index], G[index], B[index]);
tessellator.setBrightness(L[index]);
}
tessellator.addVertexWithUV(X[index], Y[index], Z[index], U[index], V[index]);
}
@Override
public void renderFaceXNeg(Block block, double x, double y, double z, IIcon icon) {
setupSides(icon, 1, 0, 4, 5, 9, 4, 5, 1, 0);
vert(1);
vert(0);
vert(9);
vert(9);
vert(0);
vert(4);
vert(9);
vert(9);
vert(4);
vert(5);
vert(9);
vert(9);
vert(5);
vert(1);
vert(9);
vert(9);
}
@Override
public void renderFaceXPos(Block block, double x, double y, double z, IIcon icon) {
setupSides(icon, 3, 2, 6, 7, 11, 3, 2, 6, 7);
vert(6);
vert(7);
vert(11);
vert(11);
vert(7);
vert(3);
vert(11);
vert(11);
vert(3);
vert(2);
vert(11);
vert(11);
vert(2);
vert(6);
vert(11);
vert(11);
}
@Override
public void renderFaceZNeg(Block block, double x, double y, double z, IIcon icon) {
setupSides(icon, 2, 3, 0, 1, 8, 0, 1, 2, 3);
vert(0);
vert(1);
vert(8);
vert(8);
vert(1);
vert(2);
vert(8);
vert(8);
vert(2);
vert(3);
vert(8);
vert(8);
vert(3);
vert(0);
vert(8);
vert(8);
}
@Override
public void renderFaceZPos(Block block, double x, double y, double z, IIcon icon) {
setupSides(icon, 4, 7, 6, 5, 10, 7, 6, 5, 4);
vert(5);
vert(4);
vert(10);
vert(10);
vert(6);
vert(5);
vert(10);
vert(10);
vert(7);
vert(6);
vert(10);
vert(10);
vert(4);
vert(7);
vert(10);
vert(10);
}
@Override
public void renderFaceYNeg(Block block, double x, double y, double z, IIcon icon) {
setupSides(icon, 0, 3, 7, 4, 13, 0, 3, 7, 4);
vert(0);
vert(3);
vert(13);
vert(13);
vert(3);
vert(7);
vert(13);
vert(13);
vert(7);
vert(4);
vert(13);
vert(13);
vert(4);
vert(0);
vert(13);
vert(13);
}
@Override
public void renderFaceYPos(Block block, double x, double y, double z, IIcon icon) {
setupSides(icon, 2, 1, 5, 6, 12, 2, 1, 5, 6);
vert(2);
vert(1);
vert(12);
vert(12);
vert(1);
vert(5);
vert(12);
vert(12);
vert(5);
vert(6);
vert(12);
vert(12);
vert(6);
vert(2);
vert(12);
vert(12);
}
}