RadialScanner class

Пакет: com.hypixel.hytale.builtin.hytalegenerator.scanners

Файл: com/hypixel/hytale/builtin/hytalegenerator/scanners/RadialScanner.java

extends: Scanner

Поля (6)

МодификаторыТипИмя
Vector3i var3
List var4
int var4
int var5
Vector3i var6
int var6

Методы (10)

МодификаторыВозвратСигнатура
public void acceptpublic void accept(@Nonnull Vector3i var1, @Nonnull Control var2)
for for(var5.y = var1.min.y; var5.y < var1.max.y; var5.y++)
for for(var5.z = var1.min.z; var5.z < var1.max.z; var5.z++)
for for(int var7 = 0; var7 < this.positionsCount; var7++)
for for(int var3 = 0; var3 < this.positionsCount && !this.rControl.stop; var3++)
abstract for for(Vector3i var5 = new Vector3i(var1.min)
if if(var2.stop)
static int indexXint indexX(int var0)
static int indexYint indexY(int var0)
static int indexZint indexZ(int var0)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3i;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.pipe.Control;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.pipe.Pipe;
class="kw">import java.util.ArrayList;
class="kw">import java.util.Comparator;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3i;

class="kw">public class RadialScanner class="kw">extends Scanner {
   @Nonnull
   class="kw">private class="kw">final Bounds3i bounds;
   @Nonnull
   class="kw">private class="kw">final Scanner childScanner;
   @Nonnull
   class="kw">private class="kw">final byte[] sortedPositions;
   class="kw">private class="kw">final int positionsCount;
   @Nonnull
   class="kw">private class="kw">final Control rControl;
   @Nonnull
   class="kw">private class="kw">final Vector3i rPosition;
   @Nonnull
   class="kw">private Pipe.One<Vector3i> rContextPipe;
   @Nonnull
   class="kw">private class="kw">final Pipe.One<Vector3i> rChildPipe = new Pipe.One<Vector3i>() {
      class="kw">public void accept(@Nonnull Vector3i var1, @Nonnull Control var2) {
         RadialScanner.this.rContextPipe.accept(var1, var2);
         if (var2.stop) {
            RadialScanner.this.rControl.stop = true;
         }
      }
   };

   class="kw">public RadialScanner(@Nonnull Bounds3i var1, @Nonnull Scanner var2) {
      this.bounds = var1.clone();
      this.childScanner = var2;
      Vector3i var3 = var1.getSize();
      this.positionsCount = var3.x * var3.y * var3.z;
      List var4 = new ArrayList<>(this.positionsCount);

      for (Vector3i var5 = new Vector3i(var1.min); var5.x < var1.max.x; var5.x++) {
         for (var5.y = var1.min.y; var5.y < var1.max.y; var5.y++) {
            for (var5.z = var1.min.z; var5.z < var1.max.z; var5.z++) {
               var4.add(new Vector3i(var5));
            }
         }
      }

      var4.sort(Comparator.comparingDouble(Vector3i::length));
      this.sortedPositions = new byte[this.positionsCount * 3];

      for (int var7 = 0; var7 < this.positionsCount; var7++) {
         Vector3i var6 = var4.get(var7);
         this.sortedPositions[indexX(var7)] = (byte)var6.x;
         this.sortedPositions[indexY(var7)] = (byte)var6.y;
         this.sortedPositions[indexZ(var7)] = (byte)var6.z;
      }

      this.bounds.stack(var2.getBounds_voxelGrid());
      this.rControl = new Control();
      this.rPosition = new Vector3i();
      this.rContextPipe = Pipe.getEmptyOne();
   }

   @Override
   class="kw">public void scan(@Nonnull Scanner.Context var1) {
   }

   @Override
   class="kw">public void scan(@Nonnull Vector3i var1, @Nonnull Pipe.One<Vector3i> var2) {
      this.rContextPipe = var2;
      this.rControl.reset();

      for (int var3 = 0; var3 < this.positionsCount && !this.rControl.stop; var3++) {
         int var4 = this.sortedPositions[indexX(var3)];
         int var5 = this.sortedPositions[indexY(var3)];
         int var6 = this.sortedPositions[indexZ(var3)];
         this.rPosition.set(var4, var5, var6);
         this.rPosition.add(var1);
         this.childScanner.scan(this.rPosition, this.rChildPipe);
      }

      this.rContextPipe = Pipe.getEmptyOne();
   }

   @Override
   class="kw">public Bounds3i getBounds_voxelGrid() {
      class="kw">return this.bounds;
   }

   class="kw">private class="kw">static int indexX(int var0) {
      class="kw">return var0 * 3;
   }

   class="kw">private class="kw">static int indexY(int var0) {
      class="kw">return var0 * 3 + 1;
   }

   class="kw">private class="kw">static int indexZ(int var0) {
      class="kw">return var0 * 3 + 2;
   }
}