ClusterProp class

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

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

extends: Prop

Поля (12)

МодификаторыТипИмя
FastRandom var10
double var13
double var15
Prop var17
PositionListScanResult var2
Bounds3i var2
Scanner.Context var3
List var3
Bounds3i var3
WindowVoxelSpace var7
WindowVoxelSpace var8
Bounds3i var9

Методы (10)

МодификаторыВозвратСигнатура
abstract throw new IllegalArgumentExceptionthrow new IllegalArgumentException("negative range")
abstract return new PositionListScanResultreturn new PositionListScanResult(var3.validPositions_out)
for for(Vector3i var5 : var3)
for for(int var11 = var1.x - this.range; var11 < var1.x + this.range; var11++)
for for(int var12 = var1.z - this.range; var12 < var1.z + this.range; var12++)
if if(var1 < 0)
if if(var3 != null)
private boolean isColumnBoundedboolean isColumnBounded(@Nonnull Prop var1)
private void placevoid place(@Nonnull Vector3i var1, @Nonnull VoxelSpace<Material> var2, @Nonnull VoxelSpace<Material> var3, @Nonnull EntityFunnel var4, double var5)
public void place_deprecatedvoid place_deprecated(@Nonnull Prop.Context var1, @Nonnull PositionListScanResult var2)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.WeightedMap;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3i;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.engine.entityfunnel.EntityFunnel;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.material.Material;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.math.Calculator;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.patterns.Pattern;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.props.Prop;
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.builtin.hytalegenerator.voxelspace.VoxelSpace;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.voxelspace.WindowVoxelSpace;
class="kw">import com.hypixel.hytale.math.util.FastRandom;
class="kw">import it.unimi.dsi.fastutil.doubles.Double2DoubleFunction;
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 ClusterProp class="kw">extends Prop {
   @Nonnull
   class="kw">private class="kw">final Double2DoubleFunction weightCurve;
   @Nonnull
   class="kw">private class="kw">final RngField rngField;
   @Nonnull
   class="kw">private class="kw">final WeightedMap<Prop> propWeightedMap;
   class="kw">private class="kw">final int range;
   @Nonnull
   class="kw">private class="kw">final Pattern pattern;
   @Nonnull
   class="kw">private class="kw">final Scanner scanner;
   @Nonnull
   class="kw">private class="kw">final Bounds3i readBounds_voxelGrid;
   @Nonnull
   class="kw">private class="kw">final Bounds3i writeBounds_voxelGrid;
   @Nonnull
   class="kw">private class="kw">final Prop.Context rChildContext;

   class="kw">public ClusterProp(int var1, @Nonnull Double2DoubleFunction var2, int var3, @Nonnull WeightedMap<Prop> var4, @Nonnull Pattern var5, @Nonnull Scanner var6) {
      if (var1 < 0) {
         throw new IllegalArgumentException("negative range");
      }

      this.range = var1;
      this.rngField = new RngField(var3);
      this.weightCurve = var2;
      this.pattern = var5;
      this.scanner = var6;
      this.readBounds_voxelGrid = var6.getBoundsWithPattern_voxelGrid(var5);
      this.writeBounds_voxelGrid = new Bounds3i(new Vector3i(-var1, -10000, -var1), new Vector3i(var1, 10000, var1));
      this.writeBounds_voxelGrid.stack(var6.getBounds_voxelGrid());
      this.propWeightedMap = new WeightedMap<>();
      var4.forEach((var2x, var3x) -> {
         if (this.isColumnBounded(var2x)) {
            this.propWeightedMap.add(var2x, var4.get(var2x));
         }
      });
      this.rChildContext = new Prop.Context();
   }

   @Override
   class="kw">public boolean generate(@Nonnull Prop.Context var1) {
      if (this.propWeightedMap.size() == 0) {
         class="kw">return false;
      }

      PositionListScanResult var2 = this.scan_deprecated(var1.position, var1.materialReadSpace);
      this.place_deprecated(var1, var2);
      class="kw">return !var2.isNegative();
   }

   @Nonnull
   class="kw">public PositionListScanResult scan_deprecated(@Nonnull Vector3i var1, @Nonnull VoxelSpace<Material> var2) {
      Scanner.Context var3 = new Scanner.Context(var1, this.pattern, var2, new ArrayList<>());
      this.scanner.scan(var3);
      class="kw">return new PositionListScanResult(var3.validPositions_out);
   }

   class="kw">public void place_deprecated(@Nonnull Prop.Context var1, @Nonnull PositionListScanResult var2) {
      List var3 = var2.getPositions();
      if (var3 != null) {
         for (Vector3i var5 : var3) {
            this.place(var5, var1.materialReadSpace, var1.materialWriteSpace, var1.entityWriteBuffer, var1.distanceToBiomeEdge);
         }
      }
   }

   class="kw">private boolean isColumnBounded(@Nonnull Prop var1) {
      Bounds3i var2 = var1.getReadBounds_voxelGrid();
      Bounds3i var3 = var1.getWriteBounds_voxelGrid();
      class="kw">return var2.min.x == 0
         && var2.min.z == 0
         && var2.max.x == 1
         && var2.max.z == 1
         && var3.min.x == 0
         && var3.min.z == 0
         && var3.max.x == 1
         && var3.max.z == 1;
   }

   class="kw">private void place(@Nonnull Vector3i var1, @Nonnull VoxelSpace<Material> var2, @Nonnull VoxelSpace<Material> var3, @Nonnull EntityFunnel var4, double var5) {
      WindowVoxelSpace var7 = new WindowVoxelSpace<>(var3);
      WindowVoxelSpace var8 = new WindowVoxelSpace<>(var3);
      Bounds3i var9 = var8.getBounds();
      this.rChildContext.materialReadSpace = var7;
      this.rChildContext.materialWriteSpace = var8;
      this.rChildContext.entityWriteBuffer = var4;
      this.rChildContext.distanceToBiomeEdge = var5;
      FastRandom var10 = new FastRandom(this.rngField.get(var1.x, var1.z));

      for (int var11 = var1.x - this.range; var11 < var1.x + this.range; var11++) {
         for (int var12 = var1.z - this.range; var12 < var1.z + this.range; var12++) {
            double var13 = Calculator.distance(var11, var12, var1.x, var1.z);
            double var15 = this.weightCurve.get(var13);
            if (!(var10.nextDouble() > var15)) {
               Prop var17 = this.propWeightedMap.pick(var10);
               if (var3.getBounds().contains(var11, var9.min.y, var12)) {
                  var8.setBounds(var11, var9.min.y, var12, var11 + 1, var9.max.y, var12 + 1);
                  this.rChildContext.position.set(var11, var1.y, var12);
                  var17.generate(this.rChildContext);
               }
            }
         }
      }

      this.rChildContext.clearReferences();
   }

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

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