UNPKG

@seroh/roll

Version:

An RPG dice-rolling library with a variety of built-in roll mechanics.

30 lines 982 B
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