BranchEvaluator class

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

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

implements: PointEvaluator

Поля (18)

МодификаторыТипИмя
final int CARDINAL_MASK
OUTWARD, INWARD, RANDOM
int var14
double var14
int var15
int var16
double var16
int var17
int var18
double var18
DoubleArray.Double2 var19
double var20
double var20
double var22
double var24
double var26
double var28
double var7

Методы (6)

МодификаторыВозвратСигнатура
Direction Direction()
static boolean checkBoundsboolean checkBounds(double var0, double var2, double var4, double var6, double var8, double var10, double var12)
static int getConnectionXint getConnectionX(BranchEvaluator.Direction var0, int var1, double var2, int var4, double var5)
static int getConnectionYint getConnectionY(BranchEvaluator.Direction var0, int var1, double var2, int var4, double var5)
return switchreturn switch(var0)
return switchreturn switch(var0)

Исходный код

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

class="kw">import com.hypixel.hytale.math.util.MathUtil;
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.CellDistanceFunction;
class="kw">import com.hypixel.hytale.procedurallib.logic.cell.CellPointFunction;
class="kw">import com.hypixel.hytale.procedurallib.logic.cell.jitter.CellJitter;
class="kw">import javax.annotation.Nonnull;
class="kw">import org.joml.Vector2i;

class="kw">public class BranchEvaluator class="kw">implements PointEvaluator {
   class="kw">protected class="kw">static class="kw">final int CARDINAL_MASK = 1;
   class="kw">protected class="kw">static class="kw">final int CARDINAL_MASK_RESULT_X = 0;
   class="kw">protected class="kw">static class="kw">final int CARDINAL_MASK_RESULT_Y = 1;
   class="kw">protected class="kw">static class="kw">final int RANDOM_DIRECTION_MASK = 3;
   class="kw">protected class="kw">static class="kw">final Vector2i[] RANDOM_DIRECTIONS = new Vector2i[]{new Vector2i(1, 1), new Vector2i(1, -1), new Vector2i(-1, 1), new Vector2i(-1, -1)};
   @Nonnull
   class="kw">protected class="kw">final CellPointFunction pointFunction;
   class="kw">protected class="kw">final BranchEvaluator.Direction direction;
   class="kw">protected class="kw">final CellJitter jitter;
   class="kw">protected class="kw">final double branch2parentScale;
   class="kw">protected class="kw">final double invLineNormalization;

   class="kw">public BranchEvaluator(@Nonnull CellDistanceFunction var1, @Nonnull CellPointFunction var2, BranchEvaluator.Direction var3, CellJitter var4, double var5) {
      this.pointFunction = var2;
      this.direction = var3;
      this.jitter = var4;
      double var7 = 1.0 / var2.scale(var5);
      this.branch2parentScale = var1.scale(var7);
      this.invLineNormalization = 1.0 / var2.normalize(1.0);
   }

   @Override
   class="kw">public CellJitter getJitter() {
      class="kw">return this.jitter;
   }

   @Override
   class="kw">public void evalPoint(
      int var1, double var2, double var4, int var6, int var7, int var8, double var9, double var11, @Nonnull ResultBuffer.ResultBuffer2d var13
   ) {
      int var14 = getConnectionX(this.direction, var13.ix2, var13.x2, var6, var9 * this.branch2parentScale);
      int var15 = getConnectionY(this.direction, var13.ix2, var13.y2, var6, var11 * this.branch2parentScale);
      int var16 = var7 + var14;
      int var17 = var8 + var15;
      int var18 = this.pointFunction.getHash(var1, var16, var17);
      DoubleArray.Double2 var19 = this.pointFunction.getOffsets(var18);
      double var20 = this.getJitter().getPointX(var16, var19);
      double var22 = this.getJitter().getPointY(var17, var19);
      double var24 = this.pointFunction.getX(var20, var22);
      double var26 = this.pointFunction.getY(var20, var22);
      if (checkBounds(var2, var4, var9, var11, var24, var26, var13.distance2)) {
         double var28 = MathUtil.distanceToLineSq(var2, var4, var9, var11, var24, var26);
         var28 *= this.invLineNormalization;
         var13.register(var6, var7, var8, var28, var9, var11);
      }
   }

   @Override
   class="kw">public void evalPoint2(int var1, double var2, double var4, int var6, int var7, int var8, double var9, double var11, ResultBuffer.ResultBuffer2d var13) {
   }

   @Override
   class="kw">public void evalPoint(
      int var1,
      double var2,
      double var4,
      double var6,
      int var8,
      int var9,
      int var10,
      int var11,
      double var12,
      double var14,
      double var16,
      ResultBuffer.ResultBuffer3d var18
   ) {
   }

   @Override
   class="kw">public void evalPoint2(
      int var1,
      double var2,
      double var4,
      double var6,
      int var8,
      int var9,
      int var10,
      int var11,
      double var12,
      double var14,
      double var16,
      ResultBuffer.ResultBuffer3d var18
   ) {
   }

   class="kw">protected class="kw">static int getConnectionX(BranchEvaluator.Direction var0, int var1, double var2, int var4, double var5) {
      if ((var4 & 1) != 0) {
         class="kw">return 0;
      }

      class="kw">return class="kw">switch (var0) {
         case OUTWARD -> var5 < var2 ? -1 : 1;
         case INWARD -> var5 > var2 ? -1 : 1;
         case RANDOM -> RANDOM_DIRECTIONS[var1 & 3].x;
      };
   }

   class="kw">protected class="kw">static int getConnectionY(BranchEvaluator.Direction var0, int var1, double var2, int var4, double var5) {
      if ((var4 & 1) != 1) {
         class="kw">return 0;
      }

      class="kw">return class="kw">switch (var0) {
         case OUTWARD -> var5 < var2 ? -1 : 1;
         case INWARD -> var5 > var2 ? -1 : 1;
         case RANDOM -> RANDOM_DIRECTIONS[var1 & 3].y;
      };
   }

   class="kw">protected class="kw">static boolean checkBounds(double var0, double var2, double var4, double var6, double var8, double var10, double var12) {
      double var14 = Math.min(var4, var8) - var12;
      double var16 = Math.min(var6, var10) - var12;
      double var18 = Math.max(var4, var8) + var12;
      double var20 = Math.max(var6, var10) + var12;
      class="kw">return var0 > var14 && var0 < var18 && var2 > var16 && var2 < var20;
   }

   class="kw">public enum Direction {
      OUTWARD,
      INWARD,
      RANDOM;

      Direction() {
      }
   }
}