package tc.oc.pgm.points;
import java.util.OptionalDouble;
import org.bukkit.Location;
import org.bukkit.World;
import org.bukkit.geometry.Vec3;
/**
* The only purpose of this class is to allow callers of {@link PointProvider#getPoint} to
* detect if the provider set an angle or not, which the CTF module needs to do.
*
* The other potential solutions were even more hacky.
*/
public class PointProviderLocation extends Location {
private OptionalDouble yaw;
private OptionalDouble pitch;
public PointProviderLocation(World world, Vec3 position) {
super(world, position);
this.yaw = this.pitch = OptionalDouble.empty();
}
public PointProviderLocation(World world, Vec3 position, OptionalDouble yaw, OptionalDouble pitch) {
super(world, position, (float) yaw.orElse(0), (float) pitch.orElse(0));
this.yaw = yaw;
this.pitch = pitch;
}
public boolean hasYaw() {
return yaw.isPresent();
}
public boolean hasPitch() {
return pitch.isPresent();
}
void clearYaw() {
this.yaw = OptionalDouble.empty();
}
void clearPitch() {
this.pitch = OptionalDouble.empty();
}
@Override
public void setYaw(float yaw) {
super.setYaw(yaw);
this.yaw = OptionalDouble.of(yaw);
}
@Override
public void setPitch(float pitch) {
super.setPitch(pitch);
this.pitch = OptionalDouble.of(pitch);
}
@Override
public PointProviderLocation clone() {
return new PointProviderLocation(getWorld(), position().copy(), yaw, pitch);
}
}