Seeded Random
SeededRandom
Section titled “SeededRandom”Deterministic PRNG based on xorshift128+ algorithm:
import { createSeededRandom } from '@esengine/procgen';
const rng = createSeededRandom(42);Basic Methods
Section titled “Basic Methods”// [0, 1) floatrng.next();
// [min, max] integerrng.nextInt(1, 10);
// [min, max) floatrng.nextFloat(0, 100);
// Boolean (with optional probability)rng.nextBool(); // 50%rng.nextBool(0.3); // 30%
// Reset to initial staterng.reset();Distribution Methods
Section titled “Distribution Methods”// Normal distribution (Gaussian)rng.nextGaussian(); // mean 0, stdDev 1rng.nextGaussian(100, 15); // mean 100, stdDev 15
// Exponential distributionrng.nextExponential(); // λ = 1rng.nextExponential(0.5); // λ = 0.5Geometry Methods
Section titled “Geometry Methods”// Uniform point in circleconst point = rng.nextPointInCircle(50); // { x, y }
// Point on circle edgeconst edge = rng.nextPointOnCircle(50); // { x, y }
// Uniform point in sphereconst point3D = rng.nextPointInSphere(50); // { x, y, z }
// Random direction vectorconst dir = rng.nextDirection2D(); // { x, y }, length 1Determinism Guarantee
Section titled “Determinism Guarantee”Same seed always produces same sequence:
const rng1 = createSeededRandom(12345);const rng2 = createSeededRandom(12345);
// These sequences are identicalconsole.log(rng1.next()); // 0.xxxconsole.log(rng2.next()); // 0.xxx (same)
console.log(rng1.nextInt(1, 100)); // Nconsole.log(rng2.nextInt(1, 100)); // N (same)Saving and Restoring State
Section titled “Saving and Restoring State”// Save seed for reproducibilityconst seed = Date.now();const rng = createSeededRandom(seed);saveSeed(seed);
// Later, restore with same seedconst savedSeed = loadSeed();const rng2 = createSeededRandom(savedSeed);// Will produce identical sequence