PositionsDensity class
Пакет: com.hypixel.hytale.builtin.hytalegenerator.density.positions
Файл: com/hypixel/hytale/builtin/hytalegenerator/density/positions/PositionsDensity.java
extends: Density
Поля (2)
| Модификаторы | Тип | Имя |
|---|---|---|
|
Pipe.One |
var2 |
|
double |
var4 |
Методы (3)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("negative distance") |
|
|
if if(var4 < 0.0) |
|
|
if if(var4 < this.rDistance[0]) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.hytalegenerator.density.positions;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.density.Density;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.density.positions.distancefunctions.DistanceFunction;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.density.positions.returntypes.ReturnType;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.pipe.Pipe;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.positionproviders.PositionProvider;
class="kw">import it.unimi.dsi.fastutil.doubles.Double2DoubleFunction;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector3d;
class="kw">public class PositionsDensity class="kw">extends Density {
@Nonnull
class="kw">private class="kw">final PositionProvider positionProvider;
class="kw">private class="kw">final double maxDistance;
class="kw">private class="kw">final double maxDistanceRaw;
@Nonnull
class="kw">private class="kw">final ReturnType returnType;
@Nonnull
class="kw">private class="kw">final DistanceFunction distanceFunction;
@Nonnull
class="kw">private class="kw">final Vector3d rMin;
@Nonnull
class="kw">private class="kw">final Vector3d rMax;
@Nonnull
class="kw">private class="kw">final Vector3d rClosestPoint;
@Nonnull
class="kw">private class="kw">final Vector3d rPreviousClosestPoint;
@Nonnull
class="kw">private class="kw">final Vector3d rLocalPoint;
@Nonnull
class="kw">private class="kw">final double[] rDistance;
@Nonnull
class="kw">private class="kw">final boolean[] rHasClosestPoint;
@Nonnull
class="kw">private class="kw">final PositionProvider.Context rPositionsContext;
class="kw">public PositionsDensity(@Nonnull PositionProvider var1, @Nonnull ReturnType var2, @Nonnull DistanceFunction var3, double var4) {
if (var4 < 0.0) {
throw new IllegalArgumentException("negative distance");
}
this.positionProvider = var1;
this.maxDistance = var4;
this.maxDistanceRaw = var4 * var4;
this.returnType = var2;
this.distanceFunction = var3;
this.rMin = new Vector3d();
this.rMax = new Vector3d();
this.rClosestPoint = new Vector3d();
this.rPreviousClosestPoint = new Vector3d();
this.rLocalPoint = new Vector3d();
this.rDistance = new double[2];
this.rHasClosestPoint = new boolean[2];
this.rPositionsContext = new PositionProvider.Context();
}
@Nonnull
class="kw">public class="kw">static Double2DoubleFunction cellNoiseDistanceFunction(double var0) {
class="kw">return var2 -> var2 / var0 - 1.0;
}
@Override
class="kw">public double process(@Nonnull Density.Context var1) {
this.rMin.set(var1.position).sub(this.maxDistance, this.maxDistance, this.maxDistance);
this.rMax.set(var1.position).add(this.maxDistance, this.maxDistance, this.maxDistance);
this.rDistance[0] = Double.MAX_VALUE;
this.rDistance[1] = Double.MAX_VALUE;
this.rHasClosestPoint[0] = false;
this.rHasClosestPoint[1] = false;
this.rClosestPoint.set(0.0, 0.0, 0.0);
this.rPreviousClosestPoint.set(0.0, 0.0, 0.0);
this.rLocalPoint.set(0.0, 0.0, 0.0);
Pipe.One var2 = (var2x, var3) -> {
this.rLocalPoint.x = var2x.x - var1.position.x;
this.rLocalPoint.y = var2x.y - var1.position.y;
this.rLocalPoint.z = var2x.z - var1.position.z;
double var4 = this.distanceFunction.getDistance(this.rLocalPoint);
if (!(this.maxDistanceRaw < var4)) {
this.rDistance[1] = Math.max(Math.min(this.rDistance[1], var4), this.rDistance[0]);
if (var4 < this.rDistance[0]) {
this.rDistance[0] = var4;
this.rPreviousClosestPoint.set(this.rClosestPoint);
this.rClosestPoint.set(var2x);
this.rHasClosestPoint[1] = this.rHasClosestPoint[0];
this.rHasClosestPoint[0] = true;
}
}
};
this.rPositionsContext.bounds.min.set(this.rMin);
this.rPositionsContext.bounds.max.set(this.rMax);
this.rPositionsContext.pipe = var2;
this.positionProvider.generate(this.rPositionsContext);
this.rDistance[0] = Math.sqrt(this.rDistance[0]);
this.rDistance[1] = Math.sqrt(this.rDistance[1]);
class="kw">return this.returnType
.get(
this.rDistance[0],
this.rDistance[1],
new Vector3d(var1.position),
this.rHasClosestPoint[0] ? this.rClosestPoint : null,
this.rHasClosestPoint[1] ? this.rPreviousClosestPoint : null,
var1
);
}
}