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() {
}
}
}