HexCellDistanceFunction class

Пакет: com.hypixel.hytale.procedurallib.logic.cell

Файл: com/hypixel/hytale/procedurallib/logic/cell/HexCellDistanceFunction.java

implements: CellDistanceFunction

Поля (33)

МодификаторыТипИмя
protected static final int BIT_NOISE1
protected static final int BIT_NOISE2
protected static final int BIT_NOISE3
final HexCellDistanceFunction DISTANCE_FUNCTION
protected static final int HASH0
CellJitter var10
int var10
int var10
DoubleArray.Double2 var11
DoubleArray.Double2 var11
int var11
CellJitter var12
CellJitter var12
int var12
double var13
double var13
CellJitter var13
double var15
double var15
int var15
int var16
double var17
double var17
int var18
double var19
double var19
int var19
DoubleArray.Double2 var20
double var21
double var23
double var25
double var27
int var3

Методы (18)

МодификаторыВозвратСигнатура
public SquirrelHashpublic SquirrelHash()
abstract throw new UnsupportedOperationExceptionthrow new UnsupportedOperationException()
for for(int var14 = 0; var14 <= var11; var14++)
for for(int var17 = 0; var17 <= var12; var17++)
public int getHashpublic int getHash(int var1, int var2, int var3)
static int getHashint getHash(int var0, int var1, int var2)
public DoubleArray.Double2 getOffsetspublic DoubleArray.Double2 getOffsets(int var1)
public double getXpublic double getX(double var1, double var3)
public double getYpublic double getY(double var1, double var3)
public static int hashpublic static int hash(int var0, int var1, int var2)
public double normalizepublic double normalize(double var1)
public double scalepublic double scale(double var1)
static int toGridXint toGridX(double var0, double var2)
abstract return toGridXreturn toGridX(var1, var3)
static int toGridYint toGridY(double var0, double var2)
abstract return toGridYreturn toGridY(var1, var3)
static double toHexXdouble toHexX(double var0, double var2)
static double toHexYdouble toHexY(double var0, double var2)

Исходный код

Показать/скрыть
class="kw">package com.hypixel.hytale.procedurallib.logic.cell;

class="kw">import com.hypixel.hytale.math.util.MathUtil;
class="kw">import com.hypixel.hytale.procedurallib.logic.CellularNoise;
class="kw">import com.hypixel.hytale.procedurallib.logic.DoubleArray;
class="kw">import com.hypixel.hytale.procedurallib.logic.ResultBuffer;
class="kw">import com.hypixel.hytale.procedurallib.logic.cell.evaluator.PointEvaluator;
class="kw">import com.hypixel.hytale.procedurallib.logic.cell.jitter.CellJitter;
class="kw">import com.hypixel.hytale.procedurallib.logic.point.PointConsumer;
class="kw">import java.util.stream.Stream;
class="kw">import javax.annotation.Nonnull;

class="kw">public class HexCellDistanceFunction class="kw">implements CellDistanceFunction {
   class="kw">public class="kw">static class="kw">final HexCellDistanceFunction DISTANCE_FUNCTION = new HexCellDistanceFunction();
   class="kw">public class="kw">static class="kw">final CellPointFunction POINT_FUNCTION = new CellPointFunction() {
      @Override
      class="kw">public double scale(double var1) {
         class="kw">return var1 * HexCellDistanceFunction.SCALE;
      }

      @Override
      class="kw">public double normalize(double var1) {
         class="kw">return var1 * 0.3333333333333333;
      }

      @Override
      class="kw">public int getHash(int var1, int var2, int var3) {
         class="kw">return HexCellDistanceFunction.getHash(var1, var2, var3);
      }

      @Override
      class="kw">public double getX(double var1, double var3) {
         class="kw">return HexCellDistanceFunction.toHexX(var1, var3);
      }

      @Override
      class="kw">public double getY(double var1, double var3) {
         class="kw">return HexCellDistanceFunction.toHexY(var1, var3);
      }

      @Override
      class="kw">public DoubleArray.Double2 getOffsets(int var1) {
         class="kw">return HexCellDistanceFunction.HEX_CELL_2D[var1 & 0xFF];
      }
   };
   class="kw">protected class="kw">static class="kw">final double X_TO_GRID_X = Math.sqrt(3.0) / 3.0;
   class="kw">protected class="kw">static class="kw">final double Y_TO_GRID_X = -0.3333333333333333;
   class="kw">protected class="kw">static class="kw">final double Y_TO_GRID_Y = 0.6666666666666666;
   class="kw">protected class="kw">static class="kw">final double X_TO_HEX_X = Math.sqrt(3.0);
   class="kw">protected class="kw">static class="kw">final double Y_TO_HEX_X = Math.sqrt(3.0) / 2.0;
   class="kw">protected class="kw">static class="kw">final double Y_TO_HEX_Y = 1.5;
   class="kw">protected class="kw">static class="kw">final double NORMALIZATION = 0.3333333333333333;
   class="kw">protected class="kw">static class="kw">final double SCALE = (X_TO_HEX_X + 1.5) / 2.0;
   class="kw">public class="kw">static class="kw">final DoubleArray.Double2[] HEX_CELL_2D = Stream.of(CellularNoise.CELL_2D)
      .map(var0 -> new DoubleArray.Double2(var0.x - 0.5, var0.y - 0.5))
      .toArray(DoubleArray.Double2[]::new);

   class="kw">public HexCellDistanceFunction() {
   }

   @Override
   class="kw">public double scale(double var1) {
      class="kw">return var1 * SCALE;
   }

   @Override
   class="kw">public double invScale(double var1) {
      class="kw">return var1 / SCALE;
   }

   @Override
   class="kw">public int getCellX(double var1, double var3) {
      class="kw">return toGridX(var1, var3);
   }

   @Override
   class="kw">public int getCellY(double var1, double var3) {
      class="kw">return toGridY(var1, var3);
   }

   @Override
   class="kw">public void nearest2D(int var1, double var2, double var4, int var6, int var7, @Nonnull ResultBuffer.ResultBuffer2d var8, @Nonnull PointEvaluator var9) {
      this.evalPoint(var1, var2, var4, var6 - 1, var7 - 1, var8, var9);
      this.evalPoint(var1, var2, var4, var6 + 0, var7 - 1, var8, var9);
      this.evalPoint(var1, var2, var4, var6 + 1, var7 - 1, var8, var9);
      this.evalPoint(var1, var2, var4, var6 - 1, var7 + 0, var8, var9);
      this.evalPoint(var1, var2, var4, var6 + 0, var7 + 0, var8, var9);
      this.evalPoint(var1, var2, var4, var6 + 1, var7 + 0, var8, var9);
      this.evalPoint(var1, var2, var4, var6 - 1, var7 + 1, var8, var9);
      this.evalPoint(var1, var2, var4, var6 + 0, var7 + 1, var8, var9);
      this.evalPoint(var1, var2, var4, var6 + 1, var7 + 1, var8, var9);
      var8.distance *= 0.3333333333333333;
   }

   @Override
   class="kw">public void nearest3D(
      int var1, double var2, double var4, double var6, int var8, int var9, int var10, ResultBuffer.ResultBuffer3d var11, PointEvaluator var12
   ) {
      throw new UnsupportedOperationException();
   }

   @Override
   class="kw">public void transition2D(int var1, double var2, double var4, int var6, int var7, @Nonnull ResultBuffer.ResultBuffer2d var8, @Nonnull PointEvaluator var9) {
      this.evalPoint2(var1, var2, var4, var6 - 1, var7 - 1, var8, var9);
      this.evalPoint2(var1, var2, var4, var6 + 0, var7 - 1, var8, var9);
      this.evalPoint2(var1, var2, var4, var6 + 1, var7 - 1, var8, var9);
      this.evalPoint2(var1, var2, var4, var6 - 1, var7 + 0, var8, var9);
      this.evalPoint2(var1, var2, var4, var6 + 0, var7 + 0, var8, var9);
      this.evalPoint2(var1, var2, var4, var6 + 1, var7 + 0, var8, var9);
      this.evalPoint2(var1, var2, var4, var6 - 1, var7 + 1, var8, var9);
      this.evalPoint2(var1, var2, var4, var6 + 0, var7 + 1, var8, var9);
      this.evalPoint2(var1, var2, var4, var6 + 1, var7 + 1, var8, var9);
      CellJitter var10 = var9.getJitter();
      if (var10.getMaxX() > 0.5) {
         this.evalPoint2(var1, var2, var4, var6 - 2, var7 - 1, var8, var9);
         this.evalPoint2(var1, var2, var4, var6 - 2, var7 + 0, var8, var9);
         this.evalPoint2(var1, var2, var4, var6 - 2, var7 + 1, var8, var9);
         this.evalPoint2(var1, var2, var4, var6 + 2, var7 + 0, var8, var9);
         this.evalPoint2(var1, var2, var4, var6 + 2, var7 - 1, var8, var9);
         this.evalPoint2(var1, var2, var4, var6 + 2, var7 + 1, var8, var9);
      }

      if (var10.getMaxY() > 0.5) {
         this.evalPoint2(var1, var2, var4, var6 - 1, var7 - 2, var8, var9);
         this.evalPoint2(var1, var2, var4, var6 + 0, var7 - 2, var8, var9);
         this.evalPoint2(var1, var2, var4, var6 + 1, var7 - 2, var8, var9);
         this.evalPoint2(var1, var2, var4, var6 - 1, var7 + 2, var8, var9);
         this.evalPoint2(var1, var2, var4, var6 + 0, var7 + 2, var8, var9);
         this.evalPoint2(var1, var2, var4, var6 + 1, var7 + 2, var8, var9);
      }

      var8.distance *= 0.3333333333333333;
      var8.distance2 *= 0.3333333333333333;
   }

   @Override
   class="kw">public void transition3D(
      int var1, double var2, double var4, double var6, int var8, int var9, int var10, ResultBuffer.ResultBuffer3d var11, PointEvaluator var12
   ) {
      throw new UnsupportedOperationException();
   }

   @Override
   class="kw">public void evalPoint(int var1, double var2, double var4, int var6, int var7, ResultBuffer.ResultBuffer2d var8, @Nonnull PointEvaluator var9) {
      int var10 = getHash(var1, var6, var7);
      DoubleArray.Double2 var11 = HEX_CELL_2D[var10 & 0xFF];
      CellJitter var12 = var9.getJitter();
      double var13 = var12.getPointX(var6, var11);
      double var15 = var12.getPointY(var7, var11);
      double var17 = toHexX(var13, var15);
      double var19 = toHexY(var13, var15);
      var9.evalPoint(var1, var2, var4, var10, var6, var7, var17, var19, var8);
   }

   @Override
   class="kw">public void evalPoint(
      int var1, double var2, double var4, double var6, int var8, int var9, int var10, ResultBuffer.ResultBuffer3d var11, PointEvaluator var12
   ) {
      throw new UnsupportedOperationException();
   }

   @Override
   class="kw">public void evalPoint2(int var1, double var2, double var4, int var6, int var7, ResultBuffer.ResultBuffer2d var8, @Nonnull PointEvaluator var9) {
      int var10 = getHash(var1, var6, var7);
      DoubleArray.Double2 var11 = HEX_CELL_2D[var10 & 0xFF];
      CellJitter var12 = var9.getJitter();
      double var13 = var12.getPointX(var6, var11);
      double var15 = var12.getPointY(var7, var11);
      double var17 = toHexX(var13, var15);
      double var19 = toHexY(var13, var15);
      var9.evalPoint2(var1, var2, var4, var10, var6, var7, var17, var19, var8);
   }

   @Override
   class="kw">public void evalPoint2(
      int var1, double var2, double var4, double var6, int var8, int var9, int var10, ResultBuffer.ResultBuffer3d var11, PointEvaluator var12
   ) {
      throw new UnsupportedOperationException();
   }

   @Override
   class="kw">public <T> void collect(
      int var1,
      int var2,
      int var3,
      int var4,
      int var5,
      int var6,
      @Nonnull ResultBuffer.Bounds2d var7,
      T var8,
      @Nonnull PointConsumer<T> var9,
      @Nonnull PointEvaluator var10
   ) {
      var3--;
      var4--;
      var5++;
      var6++;
      int var11 = var6 - var4;
      int var12 = var5 - var3 + (var11 >> 1);
      CellJitter var13 = var10.getJitter();

      for (int var14 = 0; var14 <= var11; var14++) {
         int var15 = var4 + var14;
         int var16 = var3 - (var14 >> 1);

         for (int var17 = 0; var17 <= var12; var17++) {
            int var18 = var16 + var17;
            int var19 = getHash(var2, var18, var15);
            DoubleArray.Double2 var20 = HEX_CELL_2D[var19 & 0xFF];
            double var21 = var13.getPointX(var18, var20);
            double var23 = var13.getPointY(var15, var20);
            double var25 = toHexX(var21, var23);
            double var27 = toHexY(var21, var23);
            if (var7.contains(var25, var27)) {
               var25 /= SCALE;
               var27 /= SCALE;
               var10.collectPoint(var19, var18, var15, var25, var27, var8, var9);
            }
         }
      }
   }

   @Nonnull
   @Override
   class="kw">public String toString() {
      class="kw">return "HexCellDistanceFunction{}";
   }

   class="kw">public class="kw">static int getHash(int var0, int var1, int var2) {
      class="kw">return HexCellDistanceFunction.SquirrelHash.hash(var0, var1, var2);
   }

   class="kw">public class="kw">static int toGridX(double var0, double var2) {
      class="kw">return (int)MathUtil.fastRound(X_TO_GRID_X * var0 + -0.3333333333333333 * var2);
   }

   class="kw">public class="kw">static int toGridY(double var0, double var2) {
      class="kw">return (int)MathUtil.fastRound(0.6666666666666666 * var2);
   }

   class="kw">public class="kw">static double toHexX(double var0, double var2) {
      class="kw">return X_TO_HEX_X * var0 + Y_TO_HEX_X * var2;
   }

   class="kw">public class="kw">static double toHexY(double var0, double var2) {
      class="kw">return 1.5 * var2;
   }

   class="kw">public class="kw">static class SquirrelHash {
      class="kw">protected class="kw">static class="kw">final int HASH0 = 198491317;
      class="kw">protected class="kw">static class="kw">final int BIT_NOISE1 = -1255572915;
      class="kw">protected class="kw">static class="kw">final int BIT_NOISE2 = -1255572915;
      class="kw">protected class="kw">static class="kw">final int BIT_NOISE3 = -1255572915;

      class="kw">public SquirrelHash() {
      }

      class="kw">public class="kw">static int hash(int var0, int var1, int var2) {
         int var3 = var1 + var2 * 198491317;
         var3 *= -1255572915;
         var3 += var0;
         var3 ^= var3 >> 8;
         var3 -= 1255572915;
         var3 ^= var3 << 8;
         var3 *= -1255572915;
         class="kw">return var3 ^ var3 >> 8;
      }
   }
}