package in.twizmwaz.cardinal.module.modules.regions.type;
import in.twizmwaz.cardinal.module.modules.regions.RegionModule;
import in.twizmwaz.cardinal.module.modules.regions.parsers.HalfParser;
import in.twizmwaz.cardinal.util.Numbers;
import org.bukkit.block.Block;
import org.bukkit.util.Vector;
import java.util.ArrayList;
import java.util.List;
public class HalfRegion extends RegionModule {
private static double HALF_PI = Math.PI/2;
private final Vector origin;
private final Vector normal;
public HalfRegion(String name, Vector origin, Vector normal) {
super(name);
this.origin = origin;
this.normal = normal;
}
public HalfRegion(HalfParser parser) {
this(parser.getName(), parser.getOrigin(), parser.getNormal());
}
@Override
public boolean contains(Vector vector) {
return this.normal.angle(vector.minus(origin)) <= HALF_PI;
}
@Override
public PointRegion getRandomPoint() {
while (true) {
double
x = Numbers.getRandom(Double.MIN_VALUE, Double.MAX_VALUE),
y = Numbers.getRandom(Double.MIN_VALUE, Double.MAX_VALUE),
z = Numbers.getRandom(Double.MIN_VALUE, Double.MAX_VALUE);
if (contains(new Vector(x, y, z))) return new PointRegion(null, x, y, z);
}
}
@Override
public BlockRegion getCenterBlock() {
return new BlockRegion(null, getMin().midpoint(getMax()));
}
@Override
public List<Block> getBlocks() {
return new ArrayList<>();
}
@Override
public Vector getMin() {
return new Vector(Double.MIN_VALUE, Double.MIN_VALUE, Double.MIN_VALUE);
}
@Override
public Vector getMax() {
return new Vector(Double.MAX_VALUE, Double.MAX_VALUE, Double.MAX_VALUE);
}
}