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;
}
}