SearchCone.java
package com.hypixel.hytale.builtin.portals.utils.posqueries.generators;
import com.hypixel.hytale.builtin.portals.utils.posqueries.SpatialQuery;
import com.hypixel.hytale.builtin.portals.utils.posqueries.SpatialQueryDebug;
import com.hypixel.hytale.math.vector.Vector3d;
import com.hypixel.hytale.server.core.universe.world.World;
import java.util.concurrent.ThreadLocalRandom;
import java.util.stream.Stream;
import javax.annotation.Nullable;
public class SearchCone implements SpatialQuery {
private final Vector3d direction;
private final double minRadius;
private final double maxRadius;
private final double maxDegrees;
private final int attempts;
public SearchCone(Vector3d direction, double radius, double maxDegrees, int attempts) {
this(direction, radius, radius, maxDegrees, attempts);
}
public SearchCone(Vector3d direction, double minRadius, maxRadius, maxDegrees, attempts) {
.direction = direction;
.minRadius = minRadius;
.maxRadius = maxRadius;
.maxDegrees = maxDegrees;
.attempts = attempts;
}
Stream<Vector3d> {
(debug != ) {
.minRadius == .maxRadius ? String.format(, .minRadius) : String.format(, .minRadius) + + String.format(, .maxRadius);
debug.appendLine( + radiusFmt + + String.format(, .maxDegrees) + + debug.fmt(.direction) + + debug.fmt(origin) + );
}
Math.toRadians(.maxDegrees);
Stream.generate(() -> {
ThreadLocalRandom.current();
.minRadius + rand.nextDouble() * (.maxRadius - .minRadius);
(rand.nextDouble() - ) * maxRadians;
.direction.clone().rotateY(()yawOffset).setLength(distance);
dir.add(origin);
}).limit(().attempts);
}
}