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;
         }
      });
   }
}