package in.twizmwaz.cardinal.module.modules.regions.type;
import in.twizmwaz.cardinal.module.modules.regions.RegionModule;
import in.twizmwaz.cardinal.module.modules.regions.parsers.SphereParser;
import in.twizmwaz.cardinal.util.NumUtils;
import org.bukkit.block.Block;
import org.bukkit.util.Vector;
import java.util.ArrayList;
import java.util.List;
public class SphereRegion extends RegionModule {
private final Vector origin;
private final double radius;
public SphereRegion(String name, Vector origin, double radius) {
super(name);
this.origin = origin;
this.radius = radius;
}
public SphereRegion(SphereParser parser) {
this(parser.getName(), parser.getOrigin(), parser.getRadius());
}
public double getOriginX() {
return origin.getX();
}
public double getOriginY() {
return origin.getY();
}
public double getOriginZ() {
return origin.getZ();
}
public Vector getOrigin() {
return origin;
}
public double getRadius() {
return radius;
}
@Override
public boolean contains(Vector vector) {
return vector.isInSphere(getOrigin(), getRadius());
}
@Override
public PointRegion getRandomPoint() {
double a = NumUtils.getRandom(0, radius);
double b = NumUtils.getRandom(0, 360);
double c = NumUtils.getRandom(0, radius);
double d = NumUtils.getRandom(0, 360);
double e = NumUtils.getRandom(0, radius);
double f = NumUtils.getRandom(0, 360);
return new PointRegion(null, getOriginX() + a * Math.sin(b), getOriginY() + c * Math.sin(d), getOriginZ() + e * Math.sin(f));
}
@Override
public BlockRegion getCenterBlock() {
return new BlockRegion(null, this.origin);
}
@Override
public List<Block> getBlocks() {
List<Block> results = new ArrayList<>();
CuboidRegion bound = new CuboidRegion(null, getOriginX() - radius, getOriginY() - radius, getOriginZ() - radius, getOriginX() + radius, getOriginY() + radius, getOriginZ() + radius);
for (Block block : bound.getBlocks()) {
if (contains(new BlockRegion(null, block.getX(), block.getY(), block.getZ()))) results.add(block);
}
return results;
}
}