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