classpublicPriority 3
SearchCircular
com.hypixel.hytale.builtin.portals.utils.posqueries.generators.SearchCircular
implements SpatialQuery
1
Methods
1
Public Methods
3
Fields
2
Constructors
Constructors
public
SearchCircular(double radius, int attempts)public
SearchCircular(double minRadius, double maxRadius, int attempts)Methods
Public Methods (1)
public
Stream<Vector3d> createCandidates(World world, Vector3d origin, SpatialQueryDebug debug)@Override
Fields
Private/Package Fields (3)
private
int attemptsprivate
double maxRadiusprivate
double minRadiusInheritance
Parent
Current
Interface
Child
Use mouse wheel to zoom, drag to pan. Click nodes to navigate.
Related Classes
Source Code
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 SearchCircular implements SpatialQuery {
private final double minRadius;
private final double maxRadius;
private final int attempts;
public SearchCircular(double radius, int attempts) {
this(radius, radius, attempts);
}
public SearchCircular(double minRadius, double maxRadius, int attempts) {
this.minRadius = minRadius;
this.maxRadius = maxRadius;
this.attempts = attempts;
}
@Override
public Stream<Vector3d> createCandidates(World world, Vector3d origin, @Nullable SpatialQueryDebug debug) {
if (debug != null) {
String radiusFmt = this.minRadius == this.maxRadius
? String.format("%.1f", this.minRadius)
: String.format("%.1f", this.minRadius) + "-" + String.format("%.1f", this.maxRadius);
debug.appendLine("Searching in a " + radiusFmt + " radius circle around " + debug.fmt(origin) + ":");
}
return Stream.<Vector3d>generate(() -> {
ThreadLocalRandom rand = ThreadLocalRandom.current();
double rad = rand.nextDouble() * 3.141592653589793 * 2.0;
double radius = this.minRadius + rand.nextDouble() * (this.maxRadius - this.minRadius);
return origin.clone().add(Math.cos(rad) * radius, 0.0, Math.sin(rad) * radius);
}).limit((long)this.attempts);
}
}