added files.

This commit is contained in:
nitrogenoliquido committed 2026-10-14 22:15:53 -05:00
commit e908ab2355
353 files changed
+130515

No files matched your search

@@ -0,0 +1,173 @@
package dev.slinky.client.rotation;
import dev.slinky.client.numeric.FloatNumeric;
import dev.slinky.client.numeric.NumericConstants;
import dev.slinky.client.numeric.NumericMath;
import java.security.SecureRandom;
public final strictfp class RotationRandom {
public static final RotationRandom SHARED = fresh();
private int a;
private int b;
private int c;
private int d;
public RotationRandom(int a, int b, int c, int d) {
if ((a | b | c | d) == 0) {
throw new IllegalArgumentException("zero random state");
} else {
this.a = a;
this.b = b;
this.c = c;
this.d = d;
}
}
private static strictfp RotationRandom fresh() {
SecureRandom seed = new SecureRandom();
int a = seed.nextInt();
int b = seed.nextInt();
int c = seed.nextInt();
int d = seed.nextInt();
if ((a | b | c | d) == 0) {
d = 1;
}
return new RotationRandom(a, b, c, d);
}
public static strictfp double now() {
return (double)System.nanoTime() / 1.0E9;
}
private strictfp int next() {
int sum = this.d + this.a;
int rotated = Integer.rotateLeft(this.b ^ this.d, 11);
int nextB = this.c ^ this.a ^ this.b;
int nextA = this.a ^ this.b ^ this.d;
int nextC = this.c ^ this.a ^ this.b << 9;
this.a = nextA;
this.b = nextB;
this.c = nextC;
this.d = rotated;
return sum;
}
public strictfp float interval(float low, float high) {
float width = high - low;
float value = (float)(this.next() >>> 8);
value *= 5.9604645E-8F;
value *= width;
return value + low;
}
public strictfp boolean chance(float threshold) {
return threshold > this.interval(0.0F, 1.0F);
}
public strictfp int[] state() {
return new int[]{this.a, this.b, this.c, this.d};
}
public static final class Gaussian {
private boolean valid;
private float cached;
public strictfp float sample(RotationRandom random) {
if (this.valid) {
this.valid = false;
return this.cached;
} else {
float x;
float y;
float radius;
do {
float value = (float)(random.next() >>> 8) * 5.9604645E-8F;
x = value + value + -1.0F;
value = (float)(random.next() >>> 8) * 5.9604645E-8F;
y = value + value + -1.0F;
radius = NumericMath.floatDistance(x, y);
} while (radius >= 1.0F || radius == 0.0F);
float ratio = FloatNumeric.log(radius) * -2.0F / radius;
float factor = FloatNumeric.sqrt(ratio);
this.cached = y * factor;
this.valid = true;
return x * factor;
}
}
}
public static final class Segment {
private double elapsed;
private float left;
private float right;
public strictfp float sample(float low, float high, double duration, double delta, RotationRandom random) {
this.elapsed += delta;
if (this.elapsed > duration) {
this.elapsed = 0.0;
if (this.left == 0.0F && this.right == 0.0F) {
do {
this.left = draw(random, 1304864, 1304868);
this.right = draw(random, 1304864, 1304868);
} while (NumericConstants.doubleAt(1304896) > this.maskedDifference(1304880));
} else {
this.left = this.right;
do {
this.right = draw(random, 1304912, 1304916);
} while (NumericConstants.doubleAt(1304944) > this.maskedDifference(1304928));
}
}
double phase = this.elapsed / duration;
double curve = (double)(this.right - this.left) * phase + (double)this.left;
return (float)((double)(high - low) * curve + (double)low);
}
private strictfp double maskedDifference(int mask) {
return (double)Float.intBitsToFloat(Float.floatToRawIntBits(this.left - this.right) & NumericConstants.intAt(mask));
}
private static strictfp float draw(RotationRandom random, int upper, int scale) {
float value = (float)(random.next() >>> 8);
value *= NumericConstants.floatAt(scale);
value *= NumericConstants.floatAt(upper);
return value + 0.0F;
}
}
public static final class Smooth {
private double timestamp;
private float left;
private float right;
public strictfp float sample(float low, float high, double duration, double now, RotationRandom random) {
if (now > this.timestamp + duration) {
this.timestamp = now;
if (this.left == 0.0F && this.right == 0.0F) {
do {
this.left = random.interval(0.0F, 1.0F);
this.right = random.interval(0.0F, 1.0F);
} while (0.2 > (double)RotationMath.abs(this.left - this.right));
} else {
this.left = this.right;
do {
this.right = random.interval(0.0F, 1.0F);
} while (0.2 > (double)RotationMath.abs(this.left - this.right));
}
}
double phase = (now - this.timestamp) / duration;
double curve = (double)(this.right - this.left) * phase + (double)this.left;
return (float)((double)(high - low) * curve + (double)low);
}
public strictfp boolean gate(float low, float high, double duration, double now, RotationRandom random) {
float comparison = random.interval(0.0F, 1.0F);
return this.sample(low, high, duration, now, random) > comparison;
}
}
}