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