HyCodeYourTale
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)

privateint attempts
privatedouble maxRadius
privatedouble minRadius

Inheritance

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);
   }
}