Simplex noise corruption, idk where it is used
This commit is contained in:
parent
049ef096ae
commit
11b09cbfb3
|
@ -0,0 +1,84 @@
|
|||
package io.gitlab.jfronny.quickmeth.mixin;
|
||||
|
||||
import io.gitlab.jfronny.quickmeth.quickmeth;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.noise.SimplexNoiseSampler;
|
||||
import org.spongepowered.asm.mixin.Final;
|
||||
import org.spongepowered.asm.mixin.Mixin;
|
||||
import org.spongepowered.asm.mixin.Overwrite;
|
||||
import org.spongepowered.asm.mixin.Shadow;
|
||||
|
||||
@Mixin(SimplexNoiseSampler.class)
|
||||
public class MixinSimplexNoiseSampler {
|
||||
@Shadow @Final
|
||||
private static double SKEW_FACTOR_2D;
|
||||
@Shadow @Final
|
||||
private static double UNSKEW_FACTOR_2D;
|
||||
@Shadow @Final
|
||||
protected static int[][] gradients;
|
||||
@Shadow @Final
|
||||
private int[] permutations;
|
||||
@Overwrite
|
||||
public double sample(double x, double y) {
|
||||
x = quickmeth.BoxedInvert(x);
|
||||
y = quickmeth.BoxedInvert(y);
|
||||
double d = (x + y) * SKEW_FACTOR_2D;
|
||||
int i = MathHelper.floor(x + d);
|
||||
int j = MathHelper.floor(y + d);
|
||||
double e = (double)(i + j) * UNSKEW_FACTOR_2D;
|
||||
double f = (double)i - e;
|
||||
double g = (double)j - e;
|
||||
double h = x - f;
|
||||
double k = y - g;
|
||||
byte n;
|
||||
byte o;
|
||||
if (h > k) {
|
||||
n = 1;
|
||||
o = 0;
|
||||
} else {
|
||||
n = 0;
|
||||
o = 1;
|
||||
}
|
||||
|
||||
double p = h - (double)n + UNSKEW_FACTOR_2D;
|
||||
double q = k - (double)o + UNSKEW_FACTOR_2D;
|
||||
double r = h - 1.0D + 2.0D * UNSKEW_FACTOR_2D;
|
||||
double s = k - 1.0D + 2.0D * UNSKEW_FACTOR_2D;
|
||||
int t = i & 255;
|
||||
int u = j & 255;
|
||||
int v = getGradient(t + this.getGradient(u)) % 12;
|
||||
int w = getGradient(t + n + this.getGradient(u + o)) % 12;
|
||||
int z = getGradient(t + 1 + this.getGradient(u + 1)) % 12;
|
||||
double aa = mgrad(v, h, k, 0.0D, 0.5D);
|
||||
double ab = mgrad(w, p, q, 0.0D, 0.5D);
|
||||
double ac = mgrad(z, r, s, 0.0D, 0.5D);
|
||||
return quickmeth.BoxedInvert(70.0D * (aa + ab + ac));
|
||||
}
|
||||
|
||||
@Overwrite
|
||||
private int getGradient(int hash) {
|
||||
return this.permutations[hash & 255] & 255;
|
||||
}
|
||||
|
||||
private static double mgrad(int hash, double x, double y, double z, double d) {
|
||||
x = quickmeth.BoxedInvert(x);
|
||||
y = quickmeth.BoxedInvert(y);
|
||||
z = quickmeth.BoxedInvert(z);
|
||||
d = quickmeth.BoxedInvert(d);
|
||||
|
||||
double e = d - x * x - y * y - z * z;
|
||||
double g;
|
||||
if (e < 0.0D) {
|
||||
g = 0.0D;
|
||||
} else {
|
||||
e *= e;
|
||||
g = e * e * mdot(gradients[hash], x, y, z);
|
||||
}
|
||||
|
||||
return g;
|
||||
}
|
||||
|
||||
private static double mdot(int[] gArr, double x, double y, double z) {
|
||||
return quickmeth.BoxedInvert((double)gArr[0] * x + (double)gArr[1] * y + (double)gArr[2] * z);
|
||||
}
|
||||
}
|
|
@ -6,7 +6,8 @@
|
|||
"mixins": [
|
||||
"MathHelperMixin",
|
||||
"MixinOctavePerlinNoiseSampler",
|
||||
"MixinPerlinNoiseSampler"
|
||||
"MixinPerlinNoiseSampler",
|
||||
"MixinSimplexNoiseSampler"
|
||||
],
|
||||
"client": [
|
||||
],
|
||||
|
|
Loading…
Reference in New Issue