DirectionalJitterPositionProvider class
Пакет: com.hypixel.hytale.builtin.hytalegenerator.positionproviders
Файл: com/hypixel/hytale/builtin/hytalegenerator/positionproviders/DirectionalJitterPositionProvider.java
extends: PositionProvider
Поля (4)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
float |
PI |
|
int |
var3 |
|
double |
var4 |
|
double |
var6 |
Методы (1)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
|
public void |
acceptpublic void accept(@Nonnull Vector3d var1, @Nonnull Control var2) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.hytalegenerator.positionproviders;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.bounds.Bounds3d;
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.util.FastRandom;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">import org.joml.Vector3dc;
class="kw">public class DirectionalJitterPositionProvider class="kw">extends PositionProvider {
class="kw">private class="kw">static class="kw">final float PI = (float) Math.PI;
class="kw">private class="kw">static class="kw">final double SEED_GENERATOR_RESOLUTION = 10.0;
class="kw">private class="kw">final double magnitude;
@Nonnull
class="kw">private class="kw">final PositionProvider positionProvider;
@Nonnull
class="kw">private class="kw">final RngField rngField;
@Nonnull
class="kw">private class="kw">final FastRandom random;
@Nonnull
class="kw">private class="kw">final Vector3d direction;
class="kw">private class="kw">final boolean isBidirectional;
@Nonnull
class="kw">private class="kw">final Vector3d rVector;
@Nonnull
class="kw">private class="kw">final Bounds3d rBounds;
@Nonnull
class="kw">private class="kw">final PositionProvider.Context rChildContext;
@Nonnull
class="kw">private PositionProvider.Context rContext;
@Nonnull
class="kw">private class="kw">final Pipe.One<Vector3d> rChildPipe = new Pipe.One<Vector3d>() {
class="kw">public void accept(@Nonnull Vector3d var1, @Nonnull Control var2) {
int var3 = DirectionalJitterPositionProvider.this.rngField.get(var1.x, var1.y, var1.z);
DirectionalJitterPositionProvider.this.random.setSeed(var3);
double var4 = DirectionalJitterPositionProvider.this.isBidirectional
? DirectionalJitterPositionProvider.this.random.nextDouble() * 2.0 - 1.0
: DirectionalJitterPositionProvider.this.random.nextDouble();
double var6 = DirectionalJitterPositionProvider.this.magnitude * var4;
DirectionalJitterPositionProvider.this.rVector.set(DirectionalJitterPositionProvider.this.direction).mul(var6);
var1.add(DirectionalJitterPositionProvider.this.rVector);
if (DirectionalJitterPositionProvider.this.rContext.bounds.contains(var1)) {
DirectionalJitterPositionProvider.this.rContext.pipe.accept(var1, var2);
}
}
};
class="kw">public DirectionalJitterPositionProvider(double var1, boolean var3, @Nonnull Vector3dc var4, int var5, @Nonnull PositionProvider var6) {
this.magnitude = Math.abs(var1);
this.isBidirectional = var3;
this.positionProvider = var6;
this.rngField = new RngField(var5);
this.random = new FastRandom();
this.direction = new Vector3d(var4).normalize();
this.rVector = new Vector3d();
this.rBounds = new Bounds3d();
this.rChildContext = new PositionProvider.Context();
this.rContext = new PositionProvider.Context();
}
@Override
class="kw">public void generate(@Nonnull PositionProvider.Context var1) {
this.rContext = var1;
this.rBounds.assign(var1.bounds);
this.rBounds.min.add(-this.magnitude, 0.0, -this.magnitude);
this.rBounds.max.add(this.magnitude, 0.0, this.magnitude);
this.rChildContext.assign(var1);
this.rChildContext.bounds = this.rBounds;
this.rChildContext.pipe = this.rChildPipe;
this.positionProvider.generate(this.rChildContext);
this.rChildContext.clearReferences();
this.rContext = PositionProvider.Context.DEFAULT_INSTANCE;
}
}