001package fr.aumgn.dac2.shape;
002
003import org.bukkit.World;
004
005import fr.aumgn.bukkitutils.geom.Vector;
006import fr.aumgn.bukkitutils.geom.Vector2D;
007import fr.aumgn.dac2.DAC;
008
009public enum ShapeFactory {
010
011    Cuboid {
012        @Override
013        public Shape create(DAC dac, World world, Vector center,
014                int radius, int height) {
015            return new CuboidShape(center.subtract(radius, 0, radius),
016                    center.add(radius, height - 1, radius));
017        }
018    },
019
020    Cylinder {
021        @Override
022        public Shape create(DAC dac, World world, Vector center,
023                int radius, int height) {
024            Vector2D radiusVec = new Vector2D(radius, radius);
025            int y = center.getBlockY();
026            return new CylinderShape(center.to2D(), radiusVec, y,
027                    y + height - 1);
028        }
029    },
030
031    Sphere {
032        @Override
033        public Shape create(DAC dac, World world, Vector center,
034                int radius, int height) {
035            Vector radiusVec = new Vector(radius, radius, radius);
036            return new EllipsoidShape(center, radiusVec);
037        }
038    },
039
040    Arbitrary {
041        @Override
042        public Shape create(DAC dac, World world, Vector center,
043                int radius, int height) {
044            ArbitraryFlatShapeVisitor visitor =
045                    new ArbitraryFlatShapeVisitor(dac, world, center);
046            return visitor.visit();
047        }
048    };
049
050    public abstract Shape create(DAC dac, World world, Vector center,
051            int radius, int height);
052}