package com.carpentersblocks.renderer.helper.slope.oblique;
import net.minecraft.client.renderer.RenderBlocks;
import net.minecraft.util.IIcon;
import net.minecraftforge.common.util.ForgeDirection;
import com.carpentersblocks.data.Slope;
import com.carpentersblocks.renderer.helper.RenderHelper;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class HelperOblique extends RenderHelper {
/**
* Renders the given texture to interior oblique on the bottom sloped face.
*/
public static void renderIntObliqueYNeg(RenderBlocks renderBlocks, int slopeID, double x, double y, double z, IIcon icon)
{
prepareRender(renderBlocks, ForgeDirection.NORTH, x, y, z, icon);
double uMI = uTR - (uTR - uTL) / 2;
double vMI = rotation % 2 == 0 ? vTL : (vBR - (vBR - vBL) / 2);
switch (slopeID) {
case Slope.ID_OBL_INT_NEG_NW:
setupVertex(renderBlocks, xMin, yMin, zMax, uBR, vBR, SOUTHWEST);
setupVertex(renderBlocks, xMin, yMax, zMin, uMI, vMI, NORTHWEST);
setupVertex(renderBlocks, xMax, yMin, zMin, uBL, vBL, NORTHEAST);
break;
case Slope.ID_OBL_INT_NEG_SW:
setupVertex(renderBlocks, xMin, yMax, zMax, uMI, vMI, SOUTHWEST);
setupVertex(renderBlocks, xMin, yMin, zMin, uBL, vBL, NORTHWEST);
setupVertex(renderBlocks, xMax, yMin, zMax, uBR, vBR, SOUTHEAST);
break;
case Slope.ID_OBL_INT_NEG_NE:
setupVertex(renderBlocks, xMin, yMin, zMin, uBR, vBR, NORTHWEST);
setupVertex(renderBlocks, xMax, yMax, zMin, uMI, vMI, NORTHEAST);
setupVertex(renderBlocks, xMax, yMin, zMax, uBL, vBL, SOUTHEAST);
break;
case Slope.ID_OBL_INT_NEG_SE:
setupVertex(renderBlocks, xMin, yMin, zMax, uBL, vBL, SOUTHWEST);
setupVertex(renderBlocks, xMax, yMin, zMin, uBR, vBR, NORTHEAST);
setupVertex(renderBlocks, xMax, yMax, zMax, uMI, vMI, SOUTHEAST);
break;
}
}
/**
* Renders the given texture to interior oblique on the top sloped face.
*/
public static void renderIntObliqueYPos(RenderBlocks renderBlocks, int slopeID, double x, double y, double z, IIcon icon)
{
prepareRender(renderBlocks, ForgeDirection.NORTH, x, y, z, icon);
boolean altRot = rotation % 2 == 0;
double uMI = !altRot ? uBL : (uTR - (uTR - uTL) / 2);
double vMI = altRot ? vBR : (vBR - (vBR - vBL) / 2);
switch (slopeID) {
case Slope.ID_OBL_INT_POS_NW:
setupVertex(renderBlocks, xMax, yMax, zMin, uTL, vTL, NORTHEAST);
setupVertex(renderBlocks, xMin, yMin, zMin, uMI, vMI, NORTHWEST);
setupVertex(renderBlocks, xMin, yMax, zMax, uTR, vTR, SOUTHWEST);
break;
case Slope.ID_OBL_INT_POS_SW:
setupVertex(renderBlocks, xMax, yMax, zMax, uTR, vTR, SOUTHEAST);
setupVertex(renderBlocks, xMin, yMax, zMin, uTL, vTL, NORTHWEST);
setupVertex(renderBlocks, xMin, yMin, zMax, uMI, vMI, SOUTHWEST);
break;
case Slope.ID_OBL_INT_POS_NE:
setupVertex(renderBlocks, xMax, yMax, zMax, uTL, vTL, SOUTHEAST);
setupVertex(renderBlocks, xMax, yMin, zMin, uMI, vMI, NORTHEAST);
setupVertex(renderBlocks, xMin, yMax, zMin, uTR, vTR, NORTHWEST);
break;
case Slope.ID_OBL_INT_POS_SE:
setupVertex(renderBlocks, xMax, yMin, zMax, uMI, vMI, SOUTHEAST);
setupVertex(renderBlocks, xMax, yMax, zMin, uTR, vTR, NORTHEAST);
setupVertex(renderBlocks, xMin, yMax, zMax, uTL, vTL, SOUTHWEST);
break;
}
}
/**
* Renders the given texture to exterior oblique bottom face on right.
*/
public static void renderExtObliqueYNegLeft(RenderBlocks renderBlocks, int slopeID, double x, double y, double z, IIcon icon)
{
prepareRender(renderBlocks, ForgeDirection.NORTH, x, y, z, icon);
double uTOP_MIDDLE = uTR;
double uTOP_RIGHT_MIDDLE = uTOP_MIDDLE - (uTR - uTL) / 2;
double xMid = xMax - (xMax - xMin) / 2;
double zMid = zMax - (zMax - zMin) / 2;
switch (slopeID) {
case Slope.ID_OBL_EXT_NEG_NW:
setupVertex(renderBlocks, xMid, yMax, zMid, uTOP_MIDDLE, vTR, TOP_CENTER );
setupVertex(renderBlocks, xMax, yMax, zMin, uTOP_RIGHT_MIDDLE, vTL, TOP_LEFT );
setupVertex(renderBlocks, xMax, yMin, zMax, uTOP_MIDDLE, vBL, BOTTOM_LEFT);
break;
case Slope.ID_OBL_EXT_NEG_SW:
setupVertex(renderBlocks, xMin, yMax, zMin, uTOP_RIGHT_MIDDLE, vTL, TOP_LEFT );
setupVertex(renderBlocks, xMax, yMin, zMin, uTOP_MIDDLE, vBL, BOTTOM_LEFT);
setupVertex(renderBlocks, xMid, yMax, zMid, uTOP_MIDDLE, vTR, TOP_CENTER );
break;
case Slope.ID_OBL_EXT_NEG_NE:
setupVertex(renderBlocks, xMin, yMin, zMax, uTOP_MIDDLE, vBL, BOTTOM_LEFT);
setupVertex(renderBlocks, xMid, yMax, zMid, uTOP_MIDDLE, vTR, TOP_CENTER );
setupVertex(renderBlocks, xMax, yMax, zMax, uTOP_RIGHT_MIDDLE, vTL, TOP_LEFT );
break;
case Slope.ID_OBL_EXT_NEG_SE:
setupVertex(renderBlocks, xMin, yMax, zMax, uTOP_RIGHT_MIDDLE, vTL, TOP_LEFT );
setupVertex(renderBlocks, xMin, yMin, zMin, uTOP_MIDDLE, vBL, BOTTOM_LEFT);
setupVertex(renderBlocks, xMid, yMax, zMid, uTOP_MIDDLE, vTR, TOP_CENTER );
break;
}
}
/**
* Renders the given texture to exterior oblique bottom face on right.
*/
public static void renderExtObliqueYNegRight(RenderBlocks renderBlocks, int slopeID, double x, double y, double z, IIcon icon)
{
prepareRender(renderBlocks, ForgeDirection.NORTH, x, y, z, icon);
double uTOP_MIDDLE = uTR - (uTR - uTL) / 2;
double uTOP_LEFT_MIDDLE = uTOP_MIDDLE - (uTR - uTL) / 2;
double xMid = xMax - (xMax - xMin) / 2;
double zMid = zMax - (zMax - zMin) / 2;
switch (slopeID) {
case Slope.ID_OBL_EXT_NEG_NW:
setupVertex(renderBlocks, xMin, yMax, zMax, uTOP_MIDDLE, vTR, TOP_RIGHT );
setupVertex(renderBlocks, xMid, yMax, zMid, uTOP_LEFT_MIDDLE, vTL, TOP_CENTER );
setupVertex(renderBlocks, xMax, yMin, zMax, uTOP_LEFT_MIDDLE, vBL, BOTTOM_LEFT);
break;
case Slope.ID_OBL_EXT_NEG_SW:
setupVertex(renderBlocks, xMid, yMax, zMid, uTOP_LEFT_MIDDLE, vTL, TOP_CENTER );
setupVertex(renderBlocks, xMax, yMin, zMin, uTOP_LEFT_MIDDLE, vBL, BOTTOM_LEFT);
setupVertex(renderBlocks, xMax, yMax, zMax, uTOP_MIDDLE, vTR, TOP_RIGHT );
break;
case Slope.ID_OBL_EXT_NEG_NE:
setupVertex(renderBlocks, xMin, yMin, zMax, uTOP_LEFT_MIDDLE, vBL, BOTTOM_LEFT);
setupVertex(renderBlocks, xMin, yMax, zMin, uTOP_MIDDLE, vTR, TOP_RIGHT );
setupVertex(renderBlocks, xMid, yMax, zMid, uTOP_LEFT_MIDDLE, vTL, TOP_CENTER );
break;
case Slope.ID_OBL_EXT_NEG_SE:
setupVertex(renderBlocks, xMid, yMax, zMid, uTOP_LEFT_MIDDLE, vTL, TOP_CENTER );
setupVertex(renderBlocks, xMin, yMin, zMin, uTOP_LEFT_MIDDLE, vBL, BOTTOM_LEFT);
setupVertex(renderBlocks, xMax, yMax, zMin, uTOP_MIDDLE, vTR, TOP_RIGHT );
break;
}
}
/**
* Renders the given texture to exterior oblique top face on left.
*/
public static void renderExtObliqueYPosLeft(RenderBlocks renderBlocks, int slopeID, double x, double y, double z, IIcon icon)
{
prepareRender(renderBlocks, ForgeDirection.NORTH, x, y, z, icon);
double uMI1 = uBR; // u middle coordinate, left triangle
double uMI2 = uMI1 - (uBR - uBL) / 2; // u middle coordinate, right triangle
double xMid = xMax - (xMax - xMin) / 2;
double zMid = zMax - (zMax - zMin) / 2;
switch (slopeID) {
case Slope.ID_OBL_EXT_POS_NW:
setupVertex(renderBlocks, xMax, yMax, zMax, uMI1, vTL, TOP_LEFT );
setupVertex(renderBlocks, xMax, yMin, zMin, uMI2, vBL, BOTTOM_LEFT );
setupVertex(renderBlocks, xMid, yMin, zMid, uMI1, vBR, BOTTOM_CENTER);
break;
case Slope.ID_OBL_EXT_POS_SW:
setupVertex(renderBlocks, xMid, yMin, zMid, uMI1, vBR, BOTTOM_CENTER);
setupVertex(renderBlocks, xMax, yMax, zMin, uMI1, vTL, TOP_LEFT );
setupVertex(renderBlocks, xMin, yMin, zMin, uMI2, vBL, BOTTOM_LEFT );
break;
case Slope.ID_OBL_EXT_POS_NE:
setupVertex(renderBlocks, xMax, yMin, zMax, uMI2, vBL, BOTTOM_LEFT );
setupVertex(renderBlocks, xMid, yMin, zMid, uMI1, vBR, BOTTOM_CENTER);
setupVertex(renderBlocks, xMin, yMax, zMax, uMI1, vTL, TOP_LEFT );
break;
case Slope.ID_OBL_EXT_POS_SE:
setupVertex(renderBlocks, xMin, yMax, zMin, uMI1, vTL, TOP_LEFT );
setupVertex(renderBlocks, xMin, yMin, zMax, uMI2, vBL, BOTTOM_LEFT );
setupVertex(renderBlocks, xMid, yMin, zMid, uMI1, vBR, BOTTOM_CENTER);
break;
}
}
/**
* Renders the given texture to exterior oblique top face on right.
*/
public static void renderExtObliqueYPosRight(RenderBlocks renderBlocks, int slopeID, double x, double y, double z, IIcon icon)
{
prepareRender(renderBlocks, ForgeDirection.NORTH, x, y, z, icon);
double uBOTTOM_MIDDLE = uBR - (uBR - uBL) / 2;
double uBOTTOM_LEFT_MIDDLE = uBOTTOM_MIDDLE - (uBR - uBL) / 2;
double xMid = xMax - (xMax - xMin) / 2;
double zMid = zMax - (zMax - zMin) / 2;
switch (slopeID) {
case Slope.ID_OBL_EXT_POS_NW:
setupVertex(renderBlocks, xMax, yMax, zMax, uBOTTOM_LEFT_MIDDLE, vTL, TOP_LEFT );
setupVertex(renderBlocks, xMid, yMin, zMid, uBOTTOM_LEFT_MIDDLE, vBL, BOTTOM_CENTER);
setupVertex(renderBlocks, xMin, yMin, zMax, uBOTTOM_MIDDLE, vBR, BOTTOM_RIGHT );
break;
case Slope.ID_OBL_EXT_POS_SW:
setupVertex(renderBlocks, xMax, yMin, zMax, uBOTTOM_MIDDLE, vBR, BOTTOM_RIGHT );
setupVertex(renderBlocks, xMax, yMax, zMin, uBOTTOM_LEFT_MIDDLE, vTL, TOP_LEFT );
setupVertex(renderBlocks, xMid, yMin, zMid, uBOTTOM_LEFT_MIDDLE, vBL, BOTTOM_CENTER);
break;
case Slope.ID_OBL_EXT_POS_NE:
setupVertex(renderBlocks, xMid, yMin, zMid, uBOTTOM_LEFT_MIDDLE, vBL, BOTTOM_CENTER);
setupVertex(renderBlocks, xMin, yMin, zMin, uBOTTOM_MIDDLE, vBR, BOTTOM_RIGHT );
setupVertex(renderBlocks, xMin, yMax, zMax, uBOTTOM_LEFT_MIDDLE, vTL, TOP_LEFT );
break;
case Slope.ID_OBL_EXT_POS_SE:
setupVertex(renderBlocks, xMid, yMin, zMid, uBOTTOM_LEFT_MIDDLE, vBL, BOTTOM_CENTER);
setupVertex(renderBlocks, xMax, yMin, zMin, uBOTTOM_MIDDLE, vBR, BOTTOM_RIGHT );
setupVertex(renderBlocks, xMin, yMax, zMin, uBOTTOM_LEFT_MIDDLE, vTL, TOP_LEFT );
break;
}
}
}