@haelp/teto
Version:
A typescript-based controllable TETR.IO client.
1 lines • 3.27 kB
Source Map (JSON)
{"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"}