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}