SphereSpiralIterator class

Пакет: com.hypixel.hytale.math.iterator

Файл: com/hypixel/hytale/math/iterator/SphereSpiralIterator.java

Поля (14)

МодификаторыТипИмя
int var1
int var1
int var2
int var2
var2
int var2
var2
int var3
var3
int var3
var3
int var4
int var4
int var6

Методы (19)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("radius must be non-negative: R=" + var1)
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("player radius " + var1 + " exceeds shared max " + this.shared.maxR)
public boolean advanceboolean advance()
public void configurevoid configure(int var1)
public boolean containsOffsetboolean containsOffset(int var1, int var2, int var3)
public int getCompletedDistSqint getCompletedDistSq()
if if(var1 < 0)
if if(var1 > this.shared.maxR)
if if(this.cursor >= this.endCursor)
if if(this.cursor >= this.endCursor)
if if(this.cursor == this.startCursor)
if if(var0[var4] < var1)
if if(var0[var4] <= var1)
public void initvoid init(int var1, int var2, int var3)
public void initvoid init(int var1, int var2, int var3, int var4, int var5)
static int lowerBoundint lowerBound(int[] var0, int var1)
static int upperBoundint upperBound(int[] var0, int var1)
while while(var2 < var3)
while while(var2 < var3)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.math.iterator;

class="kw">import javax.annotation.Nonnull;

class="kw">public class="kw">final class SphereSpiralIterator {
   @Nonnull
   class="kw">private class="kw">final SphereOffsets shared;
   class="kw">private class="kw">volatile int playerRsq;
   class="kw">private int centerX;
   class="kw">private int centerY;
   class="kw">private int centerZ;
   class="kw">private int cursor;
   class="kw">private int startCursor;
   class="kw">private int endCursor;
   class="kw">private int startDistSqAtInit;
   class="kw">private int endDistSqAtInit;
   @Nonnull
   class="kw">private class="kw">final SpherePosition position = new SpherePosition();

   class="kw">public SphereSpiralIterator(@Nonnull SphereOffsets var1) {
      this.shared = var1;
   }

   class="kw">public void configure(int var1) {
      if (var1 < 0) {
         throw new IllegalArgumentException("radius must be non-negative: R=" + var1);
      }

      if (var1 > this.shared.maxR) {
         throw new IllegalArgumentException("player radius " + var1 + " exceeds shared max " + this.shared.maxR);
      }

      this.playerRsq = var1 * var1;
   }

   class="kw">public void init(int var1, int var2, int var3) {
      this.init(var1, var2, var3, 0, Integer.MAX_VALUE);
   }

   class="kw">public void init(int var1, int var2, int var3, int var4, int var5) {
      this.centerX = var1;
      this.centerY = var2;
      this.centerZ = var3;
      int var6 = Math.min(var5, this.playerRsq);
      this.startDistSqAtInit = var4;
      this.endDistSqAtInit = var6;
      this.cursor = lowerBound(this.shared.distSq, var4);
      this.startCursor = this.cursor;
      this.endCursor = upperBound(this.shared.distSq, var6);
   }

   class="kw">public boolean containsOffset(int var1, int var2, int var3) {
      class="kw">return var1 * var1 + var2 * var2 + var3 * var3 <= this.playerRsq;
   }

   class="kw">public boolean advance() {
      if (this.cursor >= this.endCursor) {
         class="kw">return false;
      }

      int var1 = this.cursor;
      this.position.x = this.centerX + this.shared.dx[var1];
      this.position.y = this.centerY + this.shared.dy[var1];
      this.position.z = this.centerZ + this.shared.dz[var1];
      this.position.distSq = this.shared.distSq[var1];
      this.cursor = var1 + 1;
      class="kw">return true;
   }

   @Nonnull
   class="kw">public SpherePosition position() {
      class="kw">return this.position;
   }

   class="kw">public int getCompletedDistSq() {
      if (this.cursor >= this.endCursor) {
         class="kw">return this.endDistSqAtInit;
      }

      if (this.cursor == this.startCursor) {
         class="kw">return this.startDistSqAtInit - 1;
      }

      int var1 = this.shared.distSq[this.cursor - 1];
      int var2 = this.shared.distSq[this.cursor];
      class="kw">return var2 > var1 ? var1 : var1 - 1;
   }

   @Nonnull
   class="kw">public SphereOffsets sharedOffsets() {
      class="kw">return this.shared;
   }

   class="kw">private class="kw">static int lowerBound(int[] var0, int var1) {
      int var2 = 0;
      int var3 = var0.length;

      while (var2 < var3) {
         int var4 = var2 + var3 >>> 1;
         if (var0[var4] < var1) {
            var2 = var4 + 1;
         } else {
            var3 = var4;
         }
      }

      class="kw">return var2;
   }

   class="kw">private class="kw">static int upperBound(int[] var0, int var1) {
      int var2 = 0;
      int var3 = var0.length;

      while (var2 < var3) {
         int var4 = var2 + var3 >>> 1;
         if (var0[var4] <= var1) {
            var2 = var4 + 1;
         } else {
            var3 = var4;
         }
      }

      class="kw">return var2;
   }
}