Strategy enum

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

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

Поля (1)

МодификаторыТипИмя
DART_THROW, PICK_VALID

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3i;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.patterns.Pattern;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.pipe.Pipe;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.rng.RngField;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.scanners.Scanner;
class="kw">import com.hypixel.hytale.math.util.FastRandom;
class="kw">import it.unimi.dsi.fastutil.ints.IntArrayList;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3i;

class="kw">public class ColumnRandomScanner class="kw">extends Scanner {
   class="kw">private class="kw">final int minY;
   class="kw">private class="kw">final int maxY;
   class="kw">private class="kw">final boolean isRelativeToPosition;
   class="kw">private class="kw">final double baseHeight;
   class="kw">private class="kw">final int resultsCap;
   @Nonnull
   class="kw">private class="kw">final RngField rngField;
   @Nonnull
   class="kw">private class="kw">final ColumnRandomScanner.Strategy strategy;
   @Nonnull
   class="kw">private class="kw">final Bounds3i bounds_voxelGrid;
   @Nonnull
   class="kw">private class="kw">final List<Vector3i> rPositions;

   class="kw">public ColumnRandomScanner(int var1, int var2, int var3, int var4, @Nonnull ColumnRandomScanner.Strategy var5, boolean var6, double var7) {
      if (var3 < 0) {
         throw new IllegalArgumentException();
      }

      this.baseHeight = var7;
      this.minY = var1;
      this.maxY = var2;
      this.isRelativeToPosition = var6;
      this.resultsCap = var3;
      this.rngField = new RngField(var4);
      this.strategy = var5;
      if (!var6) {
         int var9 = -1073741824;
         int var10 = 1073741823;
         this.bounds_voxelGrid = new Bounds3i(new Vector3i(0, -1073741824, 0), new Vector3i(1, 1073741823, 1));
      } else {
         this.bounds_voxelGrid = new Bounds3i(new Vector3i(0, var1, 0), new Vector3i(1, var2, 1));
      }

      this.rPositions = new ArrayList<>();
   }

   @Override
   class="kw">public void scan(@Nonnull Scanner.Context var1) {
      class="kw">switch (this.strategy) {
         case DART_THROW:
            this.scanDartThrow(var1);
            break;
         case PICK_VALID:
            this.scanPickValid(var1);
      }
   }

   @Override
   class="kw">public void scan(@Nonnull Vector3i var1, @Nonnull Pipe.One<Vector3i> var2) {
   }

   class="kw">private void scanPickValid(@Nonnull Scanner.Context var1) {
      if (this.resultsCap != 0) {
         this.rPositions.clear();
         Bounds3i var2 = var1.materialSpace.getBounds();
         int var3;
         int var4;
         if (this.isRelativeToPosition) {
            var3 = Math.max(var1.position.y + this.minY, var2.min.y);
            var4 = Math.min(var1.position.y + this.maxY, var2.max.y);
         } else {
            int var5 = (int)this.baseHeight;
            var3 = Math.max(var5 + this.minY, var2.min.y);
            var4 = Math.min(var5 + this.maxY, var2.max.y);
         }

         int var12 = Math.max(0, var4 - var3);
         Vector3i var6 = new Vector3i(var1.position);
         Pattern.Context var7 = new Pattern.Context(var6, var1.materialSpace);

         for (int var8 = var3; var8 < var4; var8++) {
            var6.y = var8;
            if (var1.pattern.matches(var7)) {
               Vector3i var9 = new Vector3i(var1.position);
               var9.y = var8;
               this.rPositions.add(var9);
            }
         }

         if (!this.rPositions.isEmpty()) {
            if (this.rPositions.size() > this.resultsCap) {
               IntArrayList var13 = new IntArrayList(this.resultsCap);
               FastRandom var14 = new FastRandom(this.rngField.get(var1.position.x, var1.position.y, var1.position.z));

               for (int var10 = 0; var10 < this.resultsCap; var10++) {
                  int var11 = var14.nextInt(this.rPositions.size());
                  if (!var13.contains(var11)) {
                     var13.add(var11);
                     var1.validPositions_out.add(this.rPositions.get(var11));
                  }
               }
            }
         }
      }
   }

   class="kw">public void scanDartThrow(@Nonnull Scanner.Context var1) {
      if (this.resultsCap != 0) {
         Bounds3i var2 = var1.materialSpace.getBounds();
         int var3 = this.isRelativeToPosition ? Math.max(var1.position.y + this.minY, var2.min.y) : Math.max(this.minY, var2.min.y);
         int var4 = this.isRelativeToPosition ? Math.min(var1.position.y + this.maxY, var2.max.y) : Math.min(this.maxY, var2.max.y);
         int var5 = var4 - var3;
         if (var5 != 0) {
            int var6 = 1;
            int var7 = var5 * 1;
            FastRandom var8 = new FastRandom(this.rngField.get(var1.position.x, var1.position.y, var1.position.z));
            IntArrayList var9 = new IntArrayList(this.resultsCap);
            Vector3i var10 = new Vector3i(var1.position);
            Pattern.Context var11 = new Pattern.Context(var10, var1.materialSpace);

            for (int var12 = 0; var12 < var7; var12++) {
               var10.y = var8.nextInt(var5) + var3;
               if (var1.pattern.matches(var11) && !var9.contains(var10.y)) {
                  var9.add(var10.y);
                  Vector3i var13 = new Vector3i(var10);
                  var1.validPositions_out.add(var13);
                  if (var1.validPositions_out.size() == this.resultsCap) {
                     break;
                  }
               }
            }
         }
      }
   }

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

   class="kw">public enum Strategy {
      DART_THROW,
      PICK_VALID;

      Strategy() {
      }
   }
}