27 lines
691 B
JavaScript
27 lines
691 B
JavaScript
export class Rng {
|
|
constructor(seed) {
|
|
this.rand_high = seed || 0xDEADC0DE
|
|
this.rand_low = seed ^ 0x49616E42
|
|
}
|
|
|
|
random (min, max) {
|
|
this.rand_high = ((this.rand_high << 16) + (this.rand_high >> 16) + this.rand_low) & 0xffffffff;
|
|
this.rand_low = (this.rand_low + this.rand_high) & 0xffffffff;
|
|
var n = (this.rand_high >>> 0) / 0xffffffff;
|
|
return (min + n * (max-min+1))|0;
|
|
}
|
|
|
|
static serialize (rng) {
|
|
return {
|
|
rand_high: rng.rand_high,
|
|
rand_low: rng.rand_low
|
|
}
|
|
}
|
|
|
|
static unserialize (rngSerialized) {
|
|
const rng = new Rng(0)
|
|
rng.rand_high = rngSerialized.rand_high
|
|
rng.rand_low = rngSerialized.rand_low
|
|
return rng
|
|
}
|
|
}
|