{"version":3,"sources":["../../../../src/engine/utils/rng/index.ts"],"sourcesContent":["export class RNG {\n  private static readonly MODULUS: number = 2147483647;\n  private static readonly MULTIPLIER: number = 16807;\n  private static readonly MAX_FLOAT: number = 2147483646;\n\n  private value: number;\n\n  index = 0;\n\n  constructor(seed: number) {\n    this.value = seed % RNG.MODULUS;\n\n    if (this.value <= 0) {\n      this.value += RNG.MAX_FLOAT;\n    }\n\n    this.next = this.next.bind(this);\n    this.nextFloat = this.nextFloat.bind(this);\n    this.shuffleArray = this.shuffleArray.bind(this);\n    this.updateFromIndex = this.updateFromIndex.bind(this);\n    this.clone = this.clone.bind(this);\n  }\n\n  next(): number {\n    this.index++;\n    return (this.value = (RNG.MULTIPLIER * this.value) % RNG.MODULUS);\n  }\n\n  nextFloat(): number {\n    return (this.next() - 1) / RNG.MAX_FLOAT;\n  }\n\n  shuffleArray<T extends any[]>(array: T): T {\n    if (array.length === 0) {\n      return array;\n    }\n\n    for (let i = array.length - 1; i !== 0; i--) {\n      const r = Math.floor(this.nextFloat() * (i + 1));\n      [array[i], array[r]] = [array[r], array[i]];\n    }\n\n    return array;\n  }\n\n  get seed() {\n    return this.value;\n  }\n\n  set seed(value: number) {\n    this.value = value % RNG.MODULUS;\n\n    if (this.value <= 0) {\n      this.value += RNG.MAX_FLOAT;\n    }\n  }\n\n  updateFromIndex(index: number) {\n    while (this.index < index) {\n      this.next();\n    }\n  }\n\n  clone() {\n    return new RNG(this.value);\n  }\n}\n"],"names":["RNG","MODULUS","MULTIPLIER","MAX_FLOAT","value","index","seed","next","bind","nextFloat","shuffleArray","updateFromIndex","clone","array","length","i","r","Math","floor"],"mappings":"AAAA,OAAO,MAAMA;IACX,OAAwBC,UAAkB,WAAW;IACrD,OAAwBC,aAAqB,MAAM;IACnD,OAAwBC,YAAoB,WAAW;IAE/CC,MAAc;IAEtBC,QAAQ,EAAE;IAEV,YAAYC,IAAY,CAAE;QACxB,IAAI,CAACF,KAAK,GAAGE,OAAON,IAAIC,OAAO;QAE/B,IAAI,IAAI,CAACG,KAAK,IAAI,GAAG;YACnB,IAAI,CAACA,KAAK,IAAIJ,IAAIG,SAAS;QAC7B;QAEA,IAAI,CAACI,IAAI,GAAG,IAAI,CAACA,IAAI,CAACC,IAAI,CAAC,IAAI;QAC/B,IAAI,CAACC,SAAS,GAAG,IAAI,CAACA,SAAS,CAACD,IAAI,CAAC,IAAI;QACzC,IAAI,CAACE,YAAY,GAAG,IAAI,CAACA,YAAY,CAACF,IAAI,CAAC,IAAI;QAC/C,IAAI,CAACG,eAAe,GAAG,IAAI,CAACA,eAAe,CAACH,IAAI,CAAC,IAAI;QACrD,IAAI,CAACI,KAAK,GAAG,IAAI,CAACA,KAAK,CAACJ,IAAI,CAAC,IAAI;IACnC;IAEAD,OAAe;QACb,IAAI,CAACF,KAAK;QACV,OAAQ,IAAI,CAACD,KAAK,GAAG,AAACJ,IAAIE,UAAU,GAAG,IAAI,CAACE,KAAK,GAAIJ,IAAIC,OAAO;IAClE;IAEAQ,YAAoB;QAClB,OAAO,AAAC,CAAA,IAAI,CAACF,IAAI,KAAK,CAAA,IAAKP,IAAIG,SAAS;IAC1C;IAEAO,aAA8BG,KAAQ,EAAK;QACzC,IAAIA,MAAMC,MAAM,KAAK,GAAG;YACtB,OAAOD;QACT;QAEA,IAAK,IAAIE,IAAIF,MAAMC,MAAM,GAAG,GAAGC,MAAM,GAAGA,IAAK;YAC3C,MAAMC,IAAIC,KAAKC,KAAK,CAAC,IAAI,CAACT,SAAS,KAAMM,CAAAA,IAAI,CAAA;YAC7C,CAACF,KAAK,CAACE,EAAE,EAAEF,KAAK,CAACG,EAAE,CAAC,GAAG;gBAACH,KAAK,CAACG,EAAE;gBAAEH,KAAK,CAACE,EAAE;aAAC;QAC7C;QAEA,OAAOF;IACT;IAEA,IAAIP,OAAO;QACT,OAAO,IAAI,CAACF,KAAK;IACnB;IAEA,IAAIE,KAAKF,KAAa,EAAE;QACtB,IAAI,CAACA,KAAK,GAAGA,QAAQJ,IAAIC,OAAO;QAEhC,IAAI,IAAI,CAACG,KAAK,IAAI,GAAG;YACnB,IAAI,CAACA,KAAK,IAAIJ,IAAIG,SAAS;QAC7B;IACF;IAEAQ,gBAAgBN,KAAa,EAAE;QAC7B,MAAO,IAAI,CAACA,KAAK,GAAGA,MAAO;YACzB,IAAI,CAACE,IAAI;QACX;IACF;IAEAK,QAAQ;QACN,OAAO,IAAIZ,IAAI,IAAI,CAACI,KAAK;IAC3B;AACF"}