package openmods.shapes;
import openmods.utils.render.GeometryUtils;
import openmods.utils.render.GeometryUtils.Axis;
public class ShapeCuboidGenerator extends DefaultShapeGenerator {
public enum Elements {
CORNERS(true, false, false),
EDGES(true, true, false),
WALLS(true, true, true);
private final boolean corners;
private final boolean edges;
private final boolean walls;
private Elements(boolean corners, boolean edges, boolean walls) {
this.corners = corners;
this.edges = edges;
this.walls = walls;
}
}
private final boolean corners;
private final boolean edges;
private final boolean walls;
public ShapeCuboidGenerator(boolean corners, boolean edges, boolean walls) {
this.corners = corners;
this.edges = edges;
this.walls = walls;
}
public ShapeCuboidGenerator(Elements elements) {
this(elements.corners, elements.edges, elements.walls);
}
public ShapeCuboidGenerator() {
this(Elements.WALLS);
}
@Override
public void generateShape(int minX, int minY, int minZ, int maxX, int maxY, int maxZ, IShapeable shapeable) {
final int dx = maxX - minX - 2;
final int dy = maxY - minY - 2;
final int dz = maxZ - minZ - 2;
if (corners) {
shapeable.setBlock(maxX, maxY, maxZ);
shapeable.setBlock(maxX, maxY, minZ);
shapeable.setBlock(maxX, minY, maxZ);
shapeable.setBlock(maxX, minY, minZ);
shapeable.setBlock(minX, maxY, maxZ);
shapeable.setBlock(minX, maxY, minZ);
shapeable.setBlock(minX, minY, maxZ);
shapeable.setBlock(minX, minY, minZ);
}
if (edges) {
GeometryUtils.makeLine(minX, minY + 1, minZ, Axis.Y, dy, shapeable);
GeometryUtils.makeLine(minX, minY + 1, maxZ, Axis.Y, dy, shapeable);
GeometryUtils.makeLine(maxX, minY + 1, maxZ, Axis.Y, dy, shapeable);
GeometryUtils.makeLine(maxX, minY + 1, minZ, Axis.Y, dy, shapeable);
GeometryUtils.makeLine(minX + 1, minY, minZ, Axis.X, dx, shapeable);
GeometryUtils.makeLine(minX + 1, minY, maxZ, Axis.X, dx, shapeable);
GeometryUtils.makeLine(minX + 1, maxY, maxZ, Axis.X, dx, shapeable);
GeometryUtils.makeLine(minX + 1, maxY, minZ, Axis.X, dx, shapeable);
GeometryUtils.makeLine(minX, minY, minZ + 1, Axis.Z, dz, shapeable);
GeometryUtils.makeLine(minX, maxY, minZ + 1, Axis.Z, dz, shapeable);
GeometryUtils.makeLine(maxX, maxY, minZ + 1, Axis.Z, dz, shapeable);
GeometryUtils.makeLine(maxX, minY, minZ + 1, Axis.Z, dz, shapeable);
}
if (walls) {
GeometryUtils.makePlane(minX + 1, minY + 1, minZ, dx, dy, Axis.X, Axis.Y, shapeable);
GeometryUtils.makePlane(minX + 1, minY + 1, maxZ, dx, dy, Axis.X, Axis.Y, shapeable);
GeometryUtils.makePlane(minX + 1, minY, minZ + 1, dx, dz, Axis.X, Axis.Z, shapeable);
GeometryUtils.makePlane(minX + 1, maxY, minZ + 1, dx, dz, Axis.X, Axis.Z, shapeable);
GeometryUtils.makePlane(minX, minY + 1, minZ + 1, dy, dz, Axis.Y, Axis.Z, shapeable);
GeometryUtils.makePlane(maxX, minY + 1, minZ + 1, dy, dz, Axis.Y, Axis.Z, shapeable);
}
}
}