RandomScanner class
Пакет: com.hypixel.hytale.builtin.hytalegenerator.scanners
Файл: com/hypixel/hytale/builtin/hytalegenerator/scanners/RandomScanner.java
extends: Scanner
Поля (3)
| Модификаторы | Тип | Имя |
|---|---|---|
|
|
break |
|
|
break |
|
int |
var4 |
Методы (4)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public void |
acceptpublic void accept(@Nonnull Vector3i var1, @Nonnull Control var2) |
|
|
for for(int var3 = 0; var3 < this.attempts && !this.rControl.stop; var3++) |
|
|
if if(var2.stop) |
|
|
switch switch(this.axis) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.hytalegenerator.scanners;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3i;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.delimiters.RangeInt;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.pipe.Control;
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.math.Axis;
class="kw">import com.hypixel.hytale.math.util.FastRandom;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3i;
class="kw">public class RandomScanner class="kw">extends Scanner {
@Nonnull
class="kw">private class="kw">final Axis axis;
@Nonnull
class="kw">private class="kw">final RangeInt range;
@Nonnull
class="kw">private class="kw">final Scanner childScanner;
@Nonnull
class="kw">private class="kw">final Bounds3i bounds;
@Nonnull
class="kw">private class="kw">final RngField rngField;
@Nonnull
class="kw">private class="kw">final FastRandom random;
class="kw">private class="kw">final int attempts;
@Nonnull
class="kw">private class="kw">final Control rControl;
@Nonnull
class="kw">private class="kw">final Vector3i rPosition;
@Nonnull
class="kw">private Pipe.One<Vector3i> rContextPipe;
@Nonnull
class="kw">private class="kw">final Pipe.One<Vector3i> rChildPipe = new Pipe.One<Vector3i>() {
class="kw">public void accept(@Nonnull Vector3i var1, @Nonnull Control var2) {
RandomScanner.this.rContextPipe.accept(var1, var2);
if (var2.stop) {
RandomScanner.this.rControl.stop = true;
}
}
};
class="kw">public RandomScanner(@Nonnull Axis var1, @Nonnull RangeInt var2, @Nonnull Scanner var3, int var4) {
this.axis = var1;
this.range = var2;
this.childScanner = var3;
this.rngField = new RngField(var4);
this.attempts = var2.getMaxExclusive() - var2.getMinInclusive();
this.random = new FastRandom();
this.bounds = class="kw">switch (var1) {
case X -> new Bounds3i(new Vector3i(var2.getMinInclusive(), 0, 0), new Vector3i(var2.getMaxExclusive(), 1, 1));
case Y -> new Bounds3i(new Vector3i(0, var2.getMinInclusive(), 0), new Vector3i(1, var2.getMaxExclusive(), 1));
case Z -> new Bounds3i(new Vector3i(0, 0, var2.getMinInclusive()), new Vector3i(1, 1, var2.getMaxExclusive()));
};
this.bounds.stack(var3.getBounds_voxelGrid());
this.rControl = new Control();
this.rPosition = new Vector3i();
this.rContextPipe = Pipe.getEmptyOne();
}
@Override
class="kw">public void scan(@Nonnull Scanner.Context var1) {
}
@Override
class="kw">public void scan(@Nonnull Vector3i var1, @Nonnull Pipe.One<Vector3i> var2) {
this.rContextPipe = var2;
this.rPosition.set(var1);
this.rControl.reset();
this.random.setSeed(this.rngField.get(var1.x, var1.y, var1.z));
for (int var3 = 0; var3 < this.attempts && !this.rControl.stop; var3++) {
int var4 = this.random.nextInt(this.attempts) + this.range.getMinInclusive();
class="kw">switch (this.axis) {
case X:
this.rPosition.x = var4 + var1.x;
break;
case Y:
this.rPosition.y = var4 + var1.y;
break;
case Z:
this.rPosition.z = var4 + var1.z;
}
this.childScanner.scan(this.rPosition, this.rChildPipe);
}
this.rContextPipe = Pipe.getEmptyOne();
}
@Override
class="kw">public Bounds3i getBounds_voxelGrid() {
class="kw">return this.bounds;
}
}