package wecui.render.region; import wecui.WorldEditCUI; import wecui.render.LineColor; import wecui.render.shapes.Render3DBox; import wecui.render.points.PointCube; import wecui.render.shapes.Render3DGrid; import wecui.util.Vector3; import wecui.util.Vector3m; /** * Main controller for a cuboid-type region * * @author yetanotherx * @author lahwran */ public class CuboidRegion extends BaseRegion { protected PointCube firstPoint; protected PointCube secondPoint; public CuboidRegion(WorldEditCUI controller) { super(controller); } @Override public void render() { if (firstPoint != null && secondPoint != null) { firstPoint.render(); secondPoint.render(); Vector3[] bounds = this.calcBounds(); new Render3DBox(LineColor.CUBOIDBOX, bounds[0], bounds[1]).render(); new Render3DGrid(LineColor.CUBOIDGRID, bounds[0], bounds[1]).render(); } else if (firstPoint != null) { firstPoint.render(); } else if (secondPoint != null) { secondPoint.render(); } } @Override public void setCuboidPoint(int id, int x, int y, int z) { if (id == 0) { firstPoint = new PointCube(x, y, z); firstPoint.setColor(LineColor.CUBOIDPOINT1); } else if (id == 1) { secondPoint = new PointCube(x, y, z); secondPoint.setColor(LineColor.CUBOIDPOINT2); } } /** * Calculates the boundary points of the actual box. * I have no idea what I'm doing. * @return */ protected Vector3m[] calcBounds() { float off = 0.02f; float off1 = 1 + off; Vector3m[] out = new Vector3m[2]; out[0] = new Vector3m(Double.MAX_VALUE, Double.MAX_VALUE, Double.MAX_VALUE); out[1] = new Vector3m(-Double.MAX_VALUE, -Double.MAX_VALUE, -Double.MAX_VALUE); for (PointCube point : new PointCube[]{firstPoint, secondPoint}) { if (point.getPoint().getX() + off1 > out[1].getX()) { out[1].setX(point.getPoint().getX() + off1); } if (point.getPoint().getX() - off < out[0].getX()) { out[0].setX(point.getPoint().getX() - off); } if (point.getPoint().getY() + off1 > out[1].getY()) { out[1].setY(point.getPoint().getY() + off1); } if (point.getPoint().getY() - off < out[0].getY()) { out[0].setY(point.getPoint().getY() - off); } if (point.getPoint().getZ() + off1 > out[1].getZ()) { out[1].setZ(point.getPoint().getZ() + off1); } if (point.getPoint().getZ() - off < out[0].getZ()) { out[0].setZ(point.getPoint().getZ() - off); } } return out; } @Override public RegionType getType() { return RegionType.CUBOID; } }