Direction enum

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

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

Поля (1)

МодификаторыТипИмя
OUTWARD, INWARD, RANDOM

Исходный код

Показать/скрыть
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() {
      }
   }
}