SelectionMode enum

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

Файл: com/hypixel/hytale/builtin/hytalegenerator/props/OrienterProp.java

Поля (1)

МодификаторыТипИмя
ALL_VALID, FIRST_VALID, RANDOM_VALID

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3i;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.material.MaterialCache;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.patterns.Pattern;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.patterns.RotatorPattern;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.pipe.Control;
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 com.hypixel.hytale.server.core.asset.type.blocktype.config.RotationTuple;
class="kw">import it.unimi.dsi.fastutil.ints.IntArrayList;
class="kw">import it.unimi.dsi.fastutil.ints.IntList;
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 OrienterProp class="kw">extends Prop {
   @Nonnull
   class="kw">private class="kw">final List<Prop> props;
   @Nonnull
   class="kw">private class="kw">final List<Pattern> patterns;
   @Nonnull
   class="kw">private class="kw">final Scanner scanner;
   @Nonnull
   class="kw">private class="kw">final OrienterProp.SelectionMode selectionMode;
   @Nonnull
   class="kw">private class="kw">final RngField rngField;
   @Nonnull
   class="kw">private class="kw">final Bounds3i readBounds;
   @Nonnull
   class="kw">private class="kw">final Bounds3i writeBounds;
   @Nonnull
   class="kw">private class="kw">final FastRandom random;
   @Nonnull
   class="kw">private class="kw">final Pattern.Context rPatternContext;
   @Nonnull
   class="kw">private class="kw">final Prop.Context rChildContext;
   @Nonnull
   class="kw">private class="kw">final boolean[] rHasGenerated;
   @Nonnull
   class="kw">private class="kw">final IntList rValidPatternIndices;
   @Nonnull
   class="kw">private Prop.Context rContext;
   @Nonnull
   class="kw">private class="kw">final Pipe.One<Vector3i> rFirstAllValidPipe = new Pipe.One<Vector3i>() {
      class="kw">public void accept(@Nonnull Vector3i var1, @Nonnull Control var2) {
         OrienterProp.this.rPatternContext.position = var1;

         for (int var3 = 0; var3 < OrienterProp.this.patterns.size(); var3++) {
            Pattern var4 = OrienterProp.this.patterns.get(var3);
            if (var4.matches(OrienterProp.this.rPatternContext)) {
               Prop var5 = OrienterProp.this.props.get(var3);
               OrienterProp.this.rChildContext.assign(OrienterProp.this.rContext);
               OrienterProp.this.rChildContext.position = var1;
               OrienterProp.this.rHasGenerated[0] = var5.generate(OrienterProp.this.rChildContext);
               var2.stop = true;
               if (OrienterProp.this.selectionMode == OrienterProp.SelectionMode.FIRST_VALID) {
                  class="kw">return;
               }
            }
         }
      }
   };
   @Nonnull
   class="kw">private class="kw">final Pipe.One<Vector3i> rRandomValidPipe = new Pipe.One<Vector3i>() {
      class="kw">public void accept(@Nonnull Vector3i var1, @Nonnull Control var2) {
         OrienterProp.this.rPatternContext.position = var1;
         OrienterProp.this.rValidPatternIndices.clear();

         for (int var3 = 0; var3 < OrienterProp.this.patterns.size(); var3++) {
            Pattern var4 = OrienterProp.this.patterns.get(var3);
            if (var4.matches(OrienterProp.this.rPatternContext)) {
               OrienterProp.this.rValidPatternIndices.add(var3);
            }
         }

         if (!OrienterProp.this.rValidPatternIndices.isEmpty()) {
            OrienterProp.this.random.setSeed(OrienterProp.this.rngField.get(var1.x, var1.y, var1.z));
            int var5 = OrienterProp.this.random.nextInt(OrienterProp.this.rValidPatternIndices.size());
            Prop var6 = OrienterProp.this.props.get(OrienterProp.this.rValidPatternIndices.getInt(var5));
            OrienterProp.this.rChildContext.assign(OrienterProp.this.rContext);
            OrienterProp.this.rChildContext.position = var1;
            OrienterProp.this.rHasGenerated[0] = var6.generate(OrienterProp.this.rChildContext);
            var2.stop = true;
         }
      }
   };

   class="kw">public OrienterProp(
      @Nonnull List<RotationTuple> var1,
      @Nonnull Prop var2,
      @Nonnull Pattern var3,
      @Nonnull Scanner var4,
      @Nonnull MaterialCache var5,
      @Nonnull OrienterProp.SelectionMode var6,
      int var7
   ) {
      this.props = new ArrayList<>(var1.size());
      this.patterns = new ArrayList<>(var1.size());
      this.scanner = var4;
      this.selectionMode = var6;
      this.rngField = new RngField(var7);
      this.readBounds = new Bounds3i();
      this.writeBounds = new Bounds3i();
      this.random = new FastRandom();

      for (int var8 = 0; var8 < var1.size(); var8++) {
         Prop var9 = new StaticRotatorProp(var2, var1.get(var8), var5);
         Pattern var10 = new RotatorPattern(var3, var1.get(var8), var5);
         this.props.add(var9);
         this.patterns.add(var10);
         Bounds3i var11 = var4.getBoundsWithPattern_voxelGrid(var10);
         Bounds3i var12 = var9.getReadBounds_voxelGrid();
         if (!var12.isZeroVolume()) {
            var11.stack(var12);
         }

         this.readBounds.encompass(var11);
         Bounds3i var13 = var9.getWriteBounds_voxelGrid().clone();
         if (!var13.isZeroVolume()) {
            var13.stack(var11);
         }

         this.writeBounds.encompass(var13);
      }

      this.rPatternContext = new Pattern.Context();
      this.rChildContext = new Prop.Context();
      this.rHasGenerated = new boolean[1];
      this.rValidPatternIndices = new IntArrayList(this.patterns.size());
      this.rContext = Prop.Context.DEFAULT_INSTANCE;
   }

   @Override
   class="kw">public boolean generate(@Nonnull Prop.Context var1) {
      this.rContext = var1;
      this.rPatternContext.assign(var1);
      this.rHasGenerated[0] = false;
      if (this.selectionMode != OrienterProp.SelectionMode.FIRST_VALID && this.selectionMode != OrienterProp.SelectionMode.ALL_VALID) {
         this.scanner.scan(var1.position, this.rRandomValidPipe);
      } else {
         this.scanner.scan(var1.position, this.rFirstAllValidPipe);
      }

      this.rChildContext.clearReferences();
      this.rPatternContext.clearReferences();
      this.rContext = Prop.Context.DEFAULT_INSTANCE;
      class="kw">return this.rHasGenerated[0];
   }

   @Nonnull
   @Override
   class="kw">public Bounds3i getReadBounds_voxelGrid() {
      class="kw">return this.readBounds;
   }

   @Nonnull
   @Override
   class="kw">public Bounds3i getWriteBounds_voxelGrid() {
      class="kw">return this.writeBounds;
   }

   class="kw">public enum SelectionMode {
      ALL_VALID,
      FIRST_VALID,
      RANDOM_VALID;

      SelectionMode() {
      }
   }
}