001package fr.aumgn.dac2.shape.worldedit;
002
003import java.util.List;
004
005import com.sk89q.worldedit.BlockVector2D;
006import com.sk89q.worldedit.regions.CylinderRegion;
007import com.sk89q.worldedit.regions.EllipsoidRegion;
008import com.sk89q.worldedit.regions.Polygonal2DRegion;
009import com.sk89q.worldedit.regions.Region;
010import com.sk89q.worldedit.regions.CuboidRegion;
011
012import fr.aumgn.bukkitutils.geom.Vector;
013import fr.aumgn.bukkitutils.geom.Vector2D;
014import fr.aumgn.dac2.DAC;
015import fr.aumgn.dac2.exceptions.WERegionNotSupported;
016import fr.aumgn.dac2.shape.CuboidShape;
017import fr.aumgn.dac2.shape.CylinderShape;
018import fr.aumgn.dac2.shape.EllipsoidShape;
019import fr.aumgn.dac2.shape.PolygonalShape;
020import fr.aumgn.dac2.shape.Shape;
021
022public class WEShapeUtils {
023
024    public static Shape getShape(DAC dac, Region region) {
025        if (region instanceof CuboidRegion) {
026            CuboidRegion cuboid = (CuboidRegion) region;
027            return new CuboidShape(we2bu(cuboid.getMinimumPoint()),
028                    we2bu(cuboid.getMaximumPoint()));
029        } else if (region instanceof Polygonal2DRegion) {
030            Polygonal2DRegion poly = (Polygonal2DRegion) region;
031            List<BlockVector2D> wePoints = poly.getPoints();
032            Vector2D[] points = new Vector2D[wePoints.size()];
033            int i = 0;
034            for (BlockVector2D wePoint : wePoints) {
035                points[i] = we2bu(wePoint);
036                i++;
037            }
038            return new PolygonalShape(poly.getMinimumY(), poly.getMaximumY(),
039                    points);
040        } else if (region instanceof CylinderRegion) {
041            CylinderRegion cyl = (CylinderRegion) region;
042            return new CylinderShape(we2bu(cyl.getCenter().toVector2D()),
043                    we2bu(cyl.getRadius()), cyl.getMinimumY(),
044                    cyl.getMaximumY());
045        } else if (region instanceof EllipsoidRegion) {
046            EllipsoidRegion ellipsoid = (EllipsoidRegion) region;
047            return new EllipsoidShape(we2bu(ellipsoid.getCenter()),
048                    we2bu(ellipsoid.getRadius()));
049        } else {
050            throw new WERegionNotSupported(dac, region.getClass());
051        }
052    }
053
054    public static Vector we2bu(com.sk89q.worldedit.Vector vector) {
055        return new Vector(vector.getX(), vector.getY(), vector.getZ());
056    }
057
058    public static com.sk89q.worldedit.Vector bu2we(Vector vector) {
059        return new com.sk89q.worldedit.Vector(
060                vector.getX(), vector.getY(), vector.getZ());
061    }
062
063    public static Vector2D we2bu(com.sk89q.worldedit.Vector2D vector) {
064        return new Vector2D(vector.getX(), vector.getZ());
065    }
066
067    public static com.sk89q.worldedit.Vector2D bu2we(Vector2D vector) {
068        return new com.sk89q.worldedit.Vector2D(vector.getX(), vector.getZ());
069    }
070
071    public static BlockVector2D bu2blockwe(Vector2D pt) {
072        return new BlockVector2D(pt.getX(), pt.getZ());
073    }
074
075    private WEShapeUtils() {
076    }
077}