PropStage class

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

Файл: com/hypixel/hytale/builtin/hytalegenerator/engine/stages/PropStage.java

implements: Stage

Поля (44)

МодификаторыТипИмя
final double DEFAULT_BACKGROUND_DENSITY
Map var1
BufferBundle.Access.View var10
List var11
EntityBufferView var11
Bounds3i var12
Bounds3i var13
Bounds3i var14
int var14
BufferBundle.Access.View var15
int var15
EntityBufferView var16
Integer var16
List var17
Biome var17
double var18
Bounds3i var2
Bounds3i var2
BufferBundle.Access.View var2
Integer var20
Biome var21
Vector3i var22
PropDistribution.Context var23
PropRuntime var26
Biome var27
PropDistribution var28
Pipe.Two var29
Bounds3i var3
PixelBufferView var3
Registry var30
IntOpenHashSet var31
List var32
Prop.Context var34
Bounds3i var36
Bounds3i var37
Bounds3i var4
BufferBundle.Access.View var4
assert var5
Bounds3i var5
PixelBufferView var5
BufferBundle.Access.View var6
VoxelBufferView var7
BufferBundle.Access.View var8
VoxelBufferView var9

Методы (9)

МодификаторыВозвратСигнатура
abstract return new Bounds3ireturn new Bounds3i()
for for(Biome var13 : var11)
for for(int var18 = var14.min.x; var18 < var14.max.x; var18++)
for for(int var19 = var14.min.z; var19 < var14.max.z; var19++)
for for(Biome var35 : var17)
for for(Pair var25 : var32)
if if(this.entityInputBufferType != null)
if if(var17 == var27)
if if(this.entityInputBufferType != null)

Исходный код

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

class="kw">import com.hypixel.hytale.builtin.hytalegenerator.GridUtils;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.PropRuntime;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.Registry;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.biome.Biome;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3d;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3i;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.engine.bufferbundle.BufferBundle;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.engine.bufferbundle.buffers.CountedPixelBuffer;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.engine.bufferbundle.buffers.EntityBuffer;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.engine.bufferbundle.buffers.SimplePixelBuffer;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.engine.bufferbundle.buffers.VoxelBuffer;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.engine.bufferbundle.buffers.type.BufferType;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.engine.bufferbundle.buffers.type.ParametrizedBufferType;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.engine.views.EntityBufferView;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.engine.views.PixelBufferView;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.engine.views.VoxelBufferView;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.material.Material;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.material.MaterialCache;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.pipe.Pipe;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.propdistributions.PropDistribution;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.props.Prop;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.workerindexer.WorkerIndexer;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.worldstructure.WorldStructure;
class="kw">import com.hypixel.hytale.math.vector.Vector3iUtil;
class="kw">import it.unimi.dsi.fastutil.Pair;
class="kw">import it.unimi.dsi.fastutil.ints.IntOpenHashSet;
class="kw">import java.util.ArrayList;
class="kw">import java.util.HashMap;
class="kw">import java.util.List;
class="kw">import java.util.Map;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3i;

class="kw">public class PropStage class="kw">implements Stage {
   class="kw">public class="kw">static class="kw">final double DEFAULT_BACKGROUND_DENSITY = 0.0;
   @Nonnull
   class="kw">public class="kw">static class="kw">final Class<CountedPixelBuffer> biomeBufferClass = CountedPixelBuffer.class;
   @Nonnull
   class="kw">public class="kw">static class="kw">final Class<Integer> biomeClass = Integer.class;
   @Nonnull
   class="kw">public class="kw">static class="kw">final Class<SimplePixelBuffer> biomeDistanceBufferClass = SimplePixelBuffer.class;
   @Nonnull
   class="kw">public class="kw">static class="kw">final Class<BiomeDistanceStage.BiomeDistanceEntries> biomeDistanceClass = BiomeDistanceStage.BiomeDistanceEntries.class;
   @Nonnull
   class="kw">public class="kw">static class="kw">final Class<VoxelBuffer> materialBufferClass = VoxelBuffer.class;
   @Nonnull
   class="kw">public class="kw">static class="kw">final Class<Material> materialClass = Material.class;
   @Nonnull
   class="kw">public class="kw">static class="kw">final Class<EntityBuffer> entityBufferClass = EntityBuffer.class;
   @Nonnull
   class="kw">private class="kw">final ParametrizedBufferType biomeInputBufferType;
   @Nonnull
   class="kw">private class="kw">final ParametrizedBufferType biomeDistanceInputBufferType;
   @Nonnull
   class="kw">private class="kw">final ParametrizedBufferType materialInputBufferType;
   @Nullable
   class="kw">private class="kw">final BufferType entityInputBufferType;
   @Nonnull
   class="kw">private class="kw">final ParametrizedBufferType materialOutputBufferType;
   @Nonnull
   class="kw">private class="kw">final BufferType entityOutputBufferType;
   @Nonnull
   class="kw">private class="kw">final Bounds3i materialInputBounds_bufferGrid;
   @Nonnull
   class="kw">private class="kw">final Bounds3i materialInputBounds_voxelGrid;
   @Nonnull
   class="kw">private class="kw">final Bounds3i biomeInputBounds_bufferGrid;
   @Nonnull
   class="kw">private class="kw">final Bounds3i positionsBounds_voxelGrid;
   @Nonnull
   class="kw">private class="kw">final Bounds3i positionsBounds_bufferGrid;
   @Nonnull
   class="kw">private class="kw">final String stageName;
   @Nonnull
   class="kw">private class="kw">final MaterialCache materialCache;
   @Nonnull
   class="kw">private class="kw">final WorkerIndexer.Data<WorldStructure> worldStructure_workerData;
   class="kw">private class="kw">final int runtimeIndex;

   class="kw">public PropStage(
      @Nonnull String var1,
      @Nonnull ParametrizedBufferType var2,
      @Nonnull ParametrizedBufferType var3,
      @Nonnull ParametrizedBufferType var4,
      @Nullable BufferType var5,
      @Nonnull ParametrizedBufferType var6,
      @Nonnull BufferType var7,
      @Nonnull MaterialCache var8,
      @Nonnull WorkerIndexer.Data<WorldStructure> var9,
      int var10
   ) {
      assert var2.isValidType(biomeBufferClass, biomeClass);
      assert var3.isValidType(biomeDistanceBufferClass, biomeDistanceClass);
      assert var4.isValidType(materialBufferClass, materialClass);
      assert var5 == null || var5.isValidType(entityBufferClass);
      assert var6.isValidType(materialBufferClass, materialClass);
      assert var7.isValidType(entityBufferClass);
      this.biomeInputBufferType = var2;
      this.biomeDistanceInputBufferType = var3;
      this.materialInputBufferType = var4;
      this.entityInputBufferType = var5;
      this.materialOutputBufferType = var6;
      this.entityOutputBufferType = var7;
      this.worldStructure_workerData = var9;
      this.stageName = var1;
      this.materialCache = var8;
      this.runtimeIndex = var10;
      List var11 = new ArrayList<>();
      this.worldStructure_workerData.get(WorkerIndexer.Id.MAIN).getBiomeRegistry().forEach((var1x, var2x) -> var11.add(var2x));
      this.materialInputBounds_voxelGrid = new Bounds3i();
      this.positionsBounds_voxelGrid = new Bounds3i();

      for (Biome var13 : var11) {
         for (PropRuntime var15 : var13.getPropRuntimes()) {
            if (var15.getRuntimeIndex() == this.runtimeIndex) {
               var15.getPropDistribution().forEachPossibleProp(var1x -> {
                  Bounds3i var2 = var1x.getReadBounds_voxelGrid();
                  Bounds3i var3 = var1x.getWriteBounds_voxelGrid();
                  Bounds3i var4 = toInputBounds_voxelGrid(var2, var3);
                  this.materialInputBounds_voxelGrid.encompass(var4);
                  Bounds3i var5 = toPositionsBounds_voxelGrid(var3);
                  this.positionsBounds_voxelGrid.encompass(var5);
               });
            }
         }
      }

      this.materialInputBounds_voxelGrid.min.y = 0;
      this.materialInputBounds_voxelGrid.max.y = 320;
      this.materialInputBounds_bufferGrid = GridUtils.createBufferBoundsInclusive_fromVoxelBounds(this.materialInputBounds_voxelGrid);
      if (this.materialInputBounds_bufferGrid.isZeroVolume()) {
         this.materialInputBounds_bufferGrid.encompass(Vector3iUtil.ZERO);
      }

      GridUtils.setBoundsYToWorldHeight_bufferGrid(this.materialInputBounds_bufferGrid);
      this.biomeInputBounds_bufferGrid = GridUtils.createBufferBoundsInclusive_fromVoxelBounds(this.positionsBounds_voxelGrid);
      GridUtils.setBoundsYToWorldHeight_bufferGrid(this.biomeInputBounds_bufferGrid);
      this.positionsBounds_bufferGrid = GridUtils.createBufferBoundsInclusive_fromVoxelBounds(this.positionsBounds_voxelGrid);
      GridUtils.setBoundsYToWorldHeight_bufferGrid(this.positionsBounds_bufferGrid);
   }

   @Nonnull
   class="kw">private class="kw">static Bounds3i toInputBounds_voxelGrid(@Nonnull Bounds3i var0, @Nonnull Bounds3i var1) {
      if (var0.isZeroVolume()) {
         class="kw">return new Bounds3i();
      }

      Bounds3i var2 = var1.clone().flipOnOriginVoxel();
      var2.stack(var0);
      class="kw">return var2;
   }

   @Nonnull
   class="kw">private class="kw">static Bounds3i toPositionsBounds_voxelGrid(@Nonnull Bounds3i var0) {
      class="kw">return var0.clone().flipOnOriginVoxel();
   }

   @Override
   class="kw">public void run(@Nonnull Stage.Context var1) {
      BufferBundle.Access.View var2 = var1.bufferAccess.get(this.biomeInputBufferType);
      PixelBufferView var3 = new PixelBufferView<>(var2, biomeClass);
      BufferBundle.Access.View var4 = var1.bufferAccess.get(this.biomeDistanceInputBufferType);
      PixelBufferView var5 = new PixelBufferView<>(var4, biomeDistanceClass);
      BufferBundle.Access.View var6 = var1.bufferAccess.get(this.materialInputBufferType);
      VoxelBufferView var7 = new VoxelBufferView<>(var6, materialClass);
      BufferBundle.Access.View var8 = var1.bufferAccess.get(this.materialOutputBufferType);
      VoxelBufferView var9 = new VoxelBufferView<>(var8, materialClass);
      BufferBundle.Access.View var10 = var1.bufferAccess.get(this.entityOutputBufferType);
      EntityBufferView var11 = new EntityBufferView(var10);
      Bounds3i var12 = var9.getBounds();
      Bounds3i var13 = var7.getBounds();
      Bounds3i var14 = var12.clone();
      var14.stack(this.positionsBounds_voxelGrid.clone());
      var14.min.y = 0;
      var14.max.y = 320;
      var9.copyFrom(var7);
      if (!this.positionsBounds_voxelGrid.isZeroVolume()) {
         if (this.entityInputBufferType != null) {
            BufferBundle.Access.View var15 = var1.bufferAccess.get(this.entityInputBufferType);
            EntityBufferView var16 = new EntityBufferView(var15);
            var11.copyFrom(var16);
         }

         Registry var30 = this.worldStructure_workerData.get(var1.workerId).getBiomeRegistry();
         IntOpenHashSet var31 = new IntOpenHashSet();
         List var17 = new ArrayList<>();

         for (int var18 = var14.min.x; var18 < var14.max.x; var18++) {
            for (int var19 = var14.min.z; var19 < var14.max.z; var19++) {
               Integer var20 = var3.get(var18, 0, var19);
               if (var20 != null && var31.add(var20)) {
                  Biome var21 = var30.getObject(var20);
                  var17.add(var21);
               }
            }
         }

         List var32 = new ArrayList<>(10);

         for (Biome var35 : var17) {
            var35.getRuntimesWithIndex(this.runtimeIndex, var2x -> var32.add(Pair.of(var2x, var35)));
         }

         Prop.Context var34 = new Prop.Context(new Vector3i(), var7, var9, var11, Double.MAX_VALUE, null, null);
         Bounds3i var36 = new Bounds3i();
         Bounds3i var37 = new Bounds3i();
         Vector3i var22 = new Vector3i();
         PropDistribution.Context var23 = new PropDistribution.Context(new Bounds3d(), Pipe.getEmptyTwo(), Double.MAX_VALUE, null, null);

         for (Pair var25 : var32) {
            PropRuntime var26 = (PropRuntime)var25.left();
            Biome var27 = (Biome)var25.right();
            PropDistribution var28 = var26.getPropDistribution();
            Pipe.Two var29 = (var10x, var11x, var12x) -> {
               int var13 = (int)Math.floor(var10x.x);
               int var14 = (int)Math.floor(var10x.y);
               int var15 = (int)Math.floor(var10x.z);
               var37.assign(var11x.getWriteBounds_voxelGrid());
               var37.offset(var13, var14, var15);
               if (var37.intersects(var12)) {
                  var36.assign(var11x.getReadBounds_voxelGrid());
                  var36.offset(var13, var14, var15);
                  if (var36.isZeroVolume() || var13.intersects(var36)) {
                     Integer var16 = var3.get(var13, 0, var15);
                     Biome var17 = var30.getObject(var16);
                     if (var17 == var27) {
                        var22.set(var13, 0, var15);
                        double var18 = var5.get(var22).distanceToClosestOtherBiome(var16);
                        var34.distanceToBiomeEdge = var18;
                        var34.position.set(var13, var14, var15);
                        var11x.generate(var34);
                     }
                  }
               }
            };
            var23.bounds.assign(var14);
            var23.pipe = var29;
            var28.distribute(var23);
         }
      }
   }

   @Nonnull
   @Override
   class="kw">public Map<BufferType, Bounds3i> getInputTypesAndBounds_bufferGrid() {
      Map var1 = new HashMap<>();
      var1.put(this.biomeInputBufferType, this.biomeInputBounds_bufferGrid);
      var1.put(this.biomeDistanceInputBufferType, this.positionsBounds_bufferGrid);
      var1.put(this.materialInputBufferType, this.materialInputBounds_bufferGrid);
      if (this.entityInputBufferType != null) {
         var1.put(this.entityInputBufferType, this.materialInputBounds_bufferGrid);
      }

      class="kw">return var1;
   }

   @Nonnull
   @Override
   class="kw">public List<BufferType> getOutputTypes() {
      class="kw">return List.of(this.materialOutputBufferType, this.entityOutputBufferType);
   }

   @Nonnull
   @Override
   class="kw">public String getName() {
      class="kw">return this.stageName;
   }
}