Strategy enum
Пакет: com.hypixel.hytale.builtin.hytalegenerator.scanners.deprecated
Файл: com/hypixel/hytale/builtin/hytalegenerator/scanners/deprecated/ColumnRandomScanner.java
Поля (1)
| Модификаторы | Тип | Имя |
|---|---|---|
|
DART_THROW, |
PICK_VALID |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.hytalegenerator.scanners.deprecated;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3i;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.patterns.Pattern;
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 it.unimi.dsi.fastutil.ints.IntArrayList;
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 ColumnRandomScanner class="kw">extends Scanner {
class="kw">private class="kw">final int minY;
class="kw">private class="kw">final int maxY;
class="kw">private class="kw">final boolean isRelativeToPosition;
class="kw">private class="kw">final double baseHeight;
class="kw">private class="kw">final int resultsCap;
@Nonnull
class="kw">private class="kw">final RngField rngField;
@Nonnull
class="kw">private class="kw">final ColumnRandomScanner.Strategy strategy;
@Nonnull
class="kw">private class="kw">final Bounds3i bounds_voxelGrid;
@Nonnull
class="kw">private class="kw">final List<Vector3i> rPositions;
class="kw">public ColumnRandomScanner(int var1, int var2, int var3, int var4, @Nonnull ColumnRandomScanner.Strategy var5, boolean var6, double var7) {
if (var3 < 0) {
throw new IllegalArgumentException();
}
this.baseHeight = var7;
this.minY = var1;
this.maxY = var2;
this.isRelativeToPosition = var6;
this.resultsCap = var3;
this.rngField = new RngField(var4);
this.strategy = var5;
if (!var6) {
int var9 = -1073741824;
int var10 = 1073741823;
this.bounds_voxelGrid = new Bounds3i(new Vector3i(0, -1073741824, 0), new Vector3i(1, 1073741823, 1));
} else {
this.bounds_voxelGrid = new Bounds3i(new Vector3i(0, var1, 0), new Vector3i(1, var2, 1));
}
this.rPositions = new ArrayList<>();
}
@Override
class="kw">public void scan(@Nonnull Scanner.Context var1) {
class="kw">switch (this.strategy) {
case DART_THROW:
this.scanDartThrow(var1);
break;
case PICK_VALID:
this.scanPickValid(var1);
}
}
@Override
class="kw">public void scan(@Nonnull Vector3i var1, @Nonnull Pipe.One<Vector3i> var2) {
}
class="kw">private void scanPickValid(@Nonnull Scanner.Context var1) {
if (this.resultsCap != 0) {
this.rPositions.clear();
Bounds3i var2 = var1.materialSpace.getBounds();
int var3;
int var4;
if (this.isRelativeToPosition) {
var3 = Math.max(var1.position.y + this.minY, var2.min.y);
var4 = Math.min(var1.position.y + this.maxY, var2.max.y);
} else {
int var5 = (int)this.baseHeight;
var3 = Math.max(var5 + this.minY, var2.min.y);
var4 = Math.min(var5 + this.maxY, var2.max.y);
}
int var12 = Math.max(0, var4 - var3);
Vector3i var6 = new Vector3i(var1.position);
Pattern.Context var7 = new Pattern.Context(var6, var1.materialSpace);
for (int var8 = var3; var8 < var4; var8++) {
var6.y = var8;
if (var1.pattern.matches(var7)) {
Vector3i var9 = new Vector3i(var1.position);
var9.y = var8;
this.rPositions.add(var9);
}
}
if (!this.rPositions.isEmpty()) {
if (this.rPositions.size() > this.resultsCap) {
IntArrayList var13 = new IntArrayList(this.resultsCap);
FastRandom var14 = new FastRandom(this.rngField.get(var1.position.x, var1.position.y, var1.position.z));
for (int var10 = 0; var10 < this.resultsCap; var10++) {
int var11 = var14.nextInt(this.rPositions.size());
if (!var13.contains(var11)) {
var13.add(var11);
var1.validPositions_out.add(this.rPositions.get(var11));
}
}
}
}
}
}
class="kw">public void scanDartThrow(@Nonnull Scanner.Context var1) {
if (this.resultsCap != 0) {
Bounds3i var2 = var1.materialSpace.getBounds();
int var3 = this.isRelativeToPosition ? Math.max(var1.position.y + this.minY, var2.min.y) : Math.max(this.minY, var2.min.y);
int var4 = this.isRelativeToPosition ? Math.min(var1.position.y + this.maxY, var2.max.y) : Math.min(this.maxY, var2.max.y);
int var5 = var4 - var3;
if (var5 != 0) {
int var6 = 1;
int var7 = var5 * 1;
FastRandom var8 = new FastRandom(this.rngField.get(var1.position.x, var1.position.y, var1.position.z));
IntArrayList var9 = new IntArrayList(this.resultsCap);
Vector3i var10 = new Vector3i(var1.position);
Pattern.Context var11 = new Pattern.Context(var10, var1.materialSpace);
for (int var12 = 0; var12 < var7; var12++) {
var10.y = var8.nextInt(var5) + var3;
if (var1.pattern.matches(var11) && !var9.contains(var10.y)) {
var9.add(var10.y);
Vector3i var13 = new Vector3i(var10);
var1.validPositions_out.add(var13);
if (var1.validPositions_out.size() == this.resultsCap) {
break;
}
}
}
}
}
}
@Override
class="kw">public Bounds3i getBounds_voxelGrid() {
class="kw">return this.bounds_voxelGrid;
}
class="kw">public enum Strategy {
DART_THROW,
PICK_VALID;
Strategy() {
}
}
}