@seroh/roll
Version:
An RPG dice-rolling library with a variety of built-in roll mechanics.
30 lines • 982 B
JavaScript
import { Randomizer } from "./Randomizer";
export class SeededRandomizer extends Randomizer {
seed;
static LCG_MULTIPLIER = 1664525;
static LCG_INCREMENT = 1013904223;
static LCG_MODULUS = 2 ** 32;
constructor(seed) {
super();
this.seed = seed;
this.validateSeed(seed);
}
generator() {
return this.lcg(this.seed);
}
// Linear Congruential Generator (LCG) implementation
lcg(seed) {
this.seed =
(SeededRandomizer.LCG_MULTIPLIER * seed + SeededRandomizer.LCG_INCREMENT) % SeededRandomizer.LCG_MODULUS;
return this.seed / SeededRandomizer.LCG_MODULUS;
}
validateSeed(seed) {
if (!Number.isInteger(seed)) {
throw new Error("Seed must be an integer.");
}
if (seed < 0 || seed >= 2 ** 32) {
throw new Error("Seed must be a 32-bit unsigned integer (0 <= seed < 2^32).");
}
}
}
//# sourceMappingURL=SeededRandomizer.js.map