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