NodeFunction class
Пакет: com.hypixel.hytale.builtin.hytalegenerator.math
Файл: com/hypixel/hytale/builtin/hytalegenerator/math/NodeFunction.java
implements: Function<Double, Double>, Double2DoubleFunction
Поля (6)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
double |
FALLBACK_VALUE |
|
int |
var3 |
|
double[] |
var4 |
|
double[] |
var5 |
|
double |
var6 |
|
double |
var8 |
Методы (8)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
public |
Double |
applyDouble apply(@Nonnull Double var1) |
public |
boolean |
containsboolean contains(double var1) |
|
|
for for(double[] var6 : this.points) |
public |
double |
getdouble get(double var1) |
|
|
if if(var6[0] == var1) |
|
|
if if(var0[0] < var1x[0]) |
private |
int |
indexBeforeint indexBefore(double var1) |
private |
void |
initializeRangesvoid initializeRanges() |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.builtin.hytalegenerator.math;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.ArrayUtil;
class="kw">import com.hypixel.hytale.builtin.hytalegenerator.delimiters.RangeDouble;
class="kw">import it.unimi.dsi.fastutil.doubles.Double2DoubleFunction;
class="kw">import java.util.ArrayList;
class="kw">import java.util.List;
class="kw">import java.util.function.Function;
class="kw">import javax.annotation.Nonnull;
class="kw">public class NodeFunction class="kw">implements Function<Double, Double>, Double2DoubleFunction {
class="kw">private class="kw">static class="kw">final double FALLBACK_VALUE = 0.0;
@Nonnull
class="kw">private class="kw">final List<double[]> points = new ArrayList<>(2);
@Nonnull
class="kw">private class="kw">final List<RangeDouble> ranges = new ArrayList<>(2);
class="kw">public NodeFunction() {
}
class="kw">public Double apply(@Nonnull Double var1) {
class="kw">return this.get(var1);
}
class="kw">public double get(double var1) {
if (Double.isNaN(var1)) {
class="kw">return 0.0;
}
if (this.points.isEmpty()) {
class="kw">return 0.0;
}
if (this.points.size() == 1 || var1 <= this.points.getFirst()[0]) {
class="kw">return this.points.getFirst()[1];
}
if (var1 >= this.points.getLast()[0]) {
class="kw">return this.points.getLast()[1];
}
int var3 = this.indexBefore(var1);
double[] var4 = this.points.get(var3);
double[] var5 = this.points.get(var3 + 1);
double var6 = var5[1] - var4[1];
double var8 = (var1 - var4[0]) / (var5[0] - var4[0]);
class="kw">return var4[1] + var6 * var8;
}
@Nonnull
class="kw">public NodeFunction addPoint(double var1, double var3) {
for (double[] var6 : this.points) {
if (var6[0] == var1) {
class="kw">return this;
}
}
this.points.add(new double[]{var1, var3});
this.points.sort((var0, var1x) -> {
if (var0[0] < var1x[0]) {
class="kw">return -1;
} else {
class="kw">return var0[0] == var1x[0] ? 0 : 1;
}
});
this.initializeRanges();
class="kw">return this;
}
class="kw">public boolean contains(double var1) {
class="kw">return this.points.parallelStream().anyMatch(var2 -> var2[0] == var1);
}
class="kw">private void initializeRanges() {
this.ranges.clear();
for (int var1 = 0; var1 < this.points.size() - 1; var1++) {
this.ranges.add(new RangeDouble(this.points.get(var1)[0], this.points.get(var1 + 1)[0]));
}
}
class="kw">private int indexBefore(double var1) {
class="kw">return ArrayUtil.sortedSearch(this.ranges, var1, (var0, var1x) -> {
if (var0 < var1x.min()) {
class="kw">return -1;
} else {
class="kw">return var0 >= var1x.max() ? 1 : 0;
}
});
}
}