OrienterProp class

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

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

extends: Prop

Поля (12)

МодификаторыТипИмя
ALL_VALID, FIRST_VALID, RANDOM_VALID
return
Pattern var10
Bounds3i var11
Bounds3i var12
Bounds3i var13
Pattern var4
Pattern var4
Prop var5
int var5
Prop var6
Prop var9

Методы (7)

МодификаторыВозвратСигнатура
SelectionMode SelectionMode()
public void acceptpublic void accept(@Nonnull Vector3i var1, @Nonnull Control var2)
public void acceptpublic void accept(@Nonnull Vector3i var1, @Nonnull Control var2)
abstract for for(int var3 = 0; var3 < OrienterProp.this.patterns.size()
abstract for for(int var8 = 0; var8 < var1.size()
if if(OrienterProp.this.selectionMode == OrienterProp.SelectionMode.FIRST_VALID)
if if(this.selectionMode != OrienterProp.SelectionMode.FIRST_VALID && this.selectionMode != OrienterProp.SelectionMode.ALL_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() {
      }
   }
}