toosoon-prng 1.4.0 → 1.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -163,7 +163,7 @@ Pick a pseudo-random property value from a given object.
163
163
  - `object`: Object to pick the property from.
164
164
 
165
165
  ```ts
166
- prng.randomObjectProperty<T>(seed: string, object: object): T | undefined;
166
+ prng.randomObjectProperty<T>(seed: string, object: Record<string, T>): T | undefined;
167
167
  ```
168
168
 
169
169
  ##### randomIndex(seed, weights)
@@ -230,7 +230,7 @@ class ItemController<T>(seed: string, items: T[]);
230
230
  Pick a pseudo-random property value from a given object.
231
231
 
232
232
  ```ts
233
- class ObjectPropertyController<T>(seed: string, object: object);
233
+ class ObjectPropertyController<T>(seed: string, object: Record<string, T>);
234
234
  ```
235
235
 
236
236
  ### WeightsController
@@ -82,12 +82,8 @@ export declare class ItemController<T = unknown> extends BasePRNGController<T> {
82
82
  }
83
83
  export declare class ObjectPropertyController<T = unknown> extends BasePRNGController<T> {
84
84
  value: T;
85
- object: {
86
- [key: string]: T;
87
- };
88
- constructor(seed: string, object: {
89
- [key: string]: T;
90
- });
85
+ object: Record<string, T>;
86
+ constructor(seed: string, object: Record<string, T>);
91
87
  addGUI(gui: Gui): GuiController;
92
88
  getValue(): T;
93
89
  }
@@ -140,13 +136,9 @@ export declare class ItemGroupController<T = unknown> extends BasePRNGGroupContr
140
136
  createController(index: number): ItemController<T>;
141
137
  }
142
138
  export declare class ObjectPropertyGroupController<T = unknown> extends BasePRNGGroupController<T> {
143
- object: {
144
- [key: string]: T;
145
- };
139
+ object: Record<string, T>;
146
140
  controllers: ObjectPropertyController<T>[];
147
- constructor(seed: string, object: {
148
- [key: string]: T;
149
- });
141
+ constructor(seed: string, object: Record<string, T>);
150
142
  createController(index: number): ObjectPropertyController<T>;
151
143
  }
152
144
  export declare class WeightsGroupController<T = unknown> extends BasePRNGGroupController<T> {
package/lib/prng.d.ts CHANGED
@@ -1,13 +1,13 @@
1
1
  import { PRNGController } from './controllers';
2
2
  import { Algorithm } from './types';
3
3
  /**
4
- * PRNG class
4
+ * Utility class for generating pseudo-random values
5
5
  *
6
6
  * @class PRNG
7
7
  */
8
8
  declare class PRNG {
9
9
  seed: string;
10
- algorithm: Algorithm;
10
+ algorithm: (...args: number[]) => number;
11
11
  controllers: PRNGController[];
12
12
  /**
13
13
  * Add a controller to this PRNG
@@ -98,9 +98,7 @@ declare class PRNG {
98
98
  * @param {object} object Object to pick the property from
99
99
  * @returns {T|undefined} Random item picked
100
100
  */
101
- randomObjectProperty<T = unknown>(seed: string, object: {
102
- [key: string]: T;
103
- }): T | undefined;
101
+ randomObjectProperty<T = unknown>(seed: string, object: Record<string, T>): T | undefined;
104
102
  /**
105
103
  * Select a pseudo-random index from an array of weighted items
106
104
  *
@@ -109,6 +107,13 @@ declare class PRNG {
109
107
  * @returns {number} Random index based on weights
110
108
  */
111
109
  randomIndex(seed: string, weights: number[]): number;
110
+ /**
111
+ * Get the PRNG algorithm function by its name
112
+ *
113
+ * @param {Algorithm} algorithm Algorithm name
114
+ * @returns {Function} PRNG algorithm function
115
+ */
116
+ private getAlgorithm;
112
117
  }
113
118
  declare const prng: PRNG;
114
119
  export default prng;
package/lib/prng.js CHANGED
@@ -1,14 +1,14 @@
1
- import { cyrb128, jsf32, mulberry32, sfc32, splitmix32, xoshiro128ss } from 'toosoon-utils/prng';
1
+ import { jsf32, mulberry32, sfc32, splitmix32, xoshiro128ss, random } from 'toosoon-utils/prng';
2
2
  import { Algorithm } from './types';
3
3
  /**
4
- * PRNG class
4
+ * Utility class for generating pseudo-random values
5
5
  *
6
6
  * @class PRNG
7
7
  */
8
8
  var PRNG = /** @class */ (function () {
9
9
  function PRNG() {
10
10
  this.seed = '';
11
- this.algorithm = Algorithm.splitmix32;
11
+ this.algorithm = splitmix32;
12
12
  this.controllers = [];
13
13
  }
14
14
  /**
@@ -45,7 +45,7 @@ var PRNG = /** @class */ (function () {
45
45
  * @param {Algorithm} algorithm Algorithm name
46
46
  */
47
47
  PRNG.prototype.setAlgorithm = function (algorithm) {
48
- this.algorithm = algorithm;
48
+ this.algorithm = this.getAlgorithm(algorithm);
49
49
  this.controllers.forEach(function (controller) { return controller.getValue(); });
50
50
  };
51
51
  /**
@@ -56,19 +56,7 @@ var PRNG = /** @class */ (function () {
56
56
  * @returns {number}
57
57
  */
58
58
  PRNG.prototype.random = function (seed) {
59
- var hashes = cyrb128(this.seed + seed);
60
- switch (this.algorithm) {
61
- case Algorithm.splitmix32:
62
- return splitmix32(hashes[0]);
63
- case Algorithm.jsf32:
64
- return jsf32(hashes[0], hashes[1], hashes[2], hashes[3]);
65
- case Algorithm.mulberry32:
66
- return mulberry32(hashes[0]);
67
- case Algorithm.sfc32:
68
- return sfc32(hashes[0], hashes[1], hashes[2], hashes[3]);
69
- case Algorithm.xoshiro128ss:
70
- return xoshiro128ss(hashes[0], hashes[1], hashes[2], hashes[3]);
71
- }
59
+ return random({ seed: this.seed + seed, algorithm: this.algorithm });
72
60
  };
73
61
  /**
74
62
  * Generate a pseudo-random boolean (true or false)
@@ -165,19 +153,39 @@ var PRNG = /** @class */ (function () {
165
153
  return -1;
166
154
  var totalWeight = 0;
167
155
  for (var _i = 0, weights_1 = weights; _i < weights_1.length; _i++) {
168
- var weight = weights_1[_i];
169
- totalWeight += weight;
156
+ var weight_1 = weights_1[_i];
157
+ totalWeight += weight_1;
170
158
  }
171
159
  if (totalWeight <= 0)
172
160
  console.warn('PRNG.randomIndex()', 'Weights must sum to > 0', totalWeight);
173
- var random = this.random(seed) * totalWeight;
161
+ var weight = this.random(seed) * totalWeight;
174
162
  for (var i = 0; i < weights.length; i++) {
175
- if (random < weights[i])
163
+ if (weight < weights[i])
176
164
  return i;
177
- random -= weights[i];
165
+ weight -= weights[i];
178
166
  }
179
167
  return 0;
180
168
  };
169
+ /**
170
+ * Get the PRNG algorithm function by its name
171
+ *
172
+ * @param {Algorithm} algorithm Algorithm name
173
+ * @returns {Function} PRNG algorithm function
174
+ */
175
+ PRNG.prototype.getAlgorithm = function (algorithm) {
176
+ switch (algorithm) {
177
+ case Algorithm.splitmix32:
178
+ return splitmix32;
179
+ case Algorithm.jsf32:
180
+ return jsf32;
181
+ case Algorithm.mulberry32:
182
+ return mulberry32;
183
+ case Algorithm.sfc32:
184
+ return sfc32;
185
+ case Algorithm.xoshiro128ss:
186
+ return xoshiro128ss;
187
+ }
188
+ };
181
189
  return PRNG;
182
190
  }());
183
191
  var prng = new PRNG();
@@ -1 +1 @@
1
- {"program":{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/typescript/lib/lib.es2023.d.ts","../node_modules/typescript/lib/lib.esnext.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/typescript/lib/lib.es2023.array.d.ts","../node_modules/typescript/lib/lib.es2023.collection.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/toosoon-gui/lib/wrapper.d.ts","../node_modules/toosoon-gui/lib/types.d.ts","../node_modules/toosoon-gui/lib/controllers/controller.d.ts","../node_modules/toosoon-gui/lib/controllers/angle-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/color-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/coords-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/file-controller.d.ts","../node_modules/toosoon-gui/lib/gui.d.ts","../node_modules/toosoon-gui/lib/controllers/boolean-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/function-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/number-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/option-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/string-controller.d.ts","../node_modules/toosoon-gui/lib/index.d.ts","../node_modules/toosoon-utils/lib/prng.d.ts","../src/types.ts","../src/prng.ts","../src/controllers.ts","../src/index.ts"],"fileInfos":[{"version":"f33e5332b24c3773e930e212cbb8b6867c8ba3ec4492064ea78e55a524d57450","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","26f2f787e82c4222710f3b676b4d83eb5ad0a72fa7b746f03449e7a026ce5073","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","1c0cdb8dc619bc549c3e5020643e7cf7ae7940058e8c7e5aefa5871b6d86f44b","bed7b7ba0eb5a160b69af72814b4dde371968e40b6c5e73d3a9f7bee407d158c",{"version":"21e41a76098aa7a191028256e52a726baafd45a925ea5cf0222eb430c96c1d83","affectsGlobalScope":true},{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"e0275cd0e42990dc3a16f0b7c8bca3efe87f1c8ad404f80c6db1c7c0b828c59f","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"ec0104fee478075cb5171e5f4e3f23add8e02d845ae0165bfa3f1099241fa2aa","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"acae90d417bee324b1372813b5a00829d31c7eb670d299cd7f8f9a648ac05688","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"62a4966981264d1f04c44eb0f4b5bdc3d81c1a54725608861e44755aa24ad6a5","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true},{"version":"86a34c7a13de9cabc43161348f663624b56871ed80986e41d214932ddd8d6719","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"50d53ccd31f6667aff66e3d62adf948879a3a16f05d89882d1188084ee415bbc","affectsGlobalScope":true},{"version":"08a58483392df5fcc1db57d782e87734f77ae9eab42516028acbfe46f29a3ef7","affectsGlobalScope":true},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true},{"version":"13f6e6380c78e15e140243dc4be2fa546c287c6d61f4729bc2dd7cf449605471","affectsGlobalScope":true},{"version":"4350e5922fecd4bedda2964d69c213a1436349d0b8d260dd902795f5b94dc74b","affectsGlobalScope":true},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"7f3b56b751819dfc3d25393d8232f400b8cbef152423e71d1e4e5db81cf2e2db","f7e25ae88d386440b751e25f12ec98bdd80822c54e58ed3cb80cc306ae9510e6","32c3a14e4806136096ba2da0c5101889803156a384c25c81d67e872e3be0d3ba","6339a44514a06c5e8f726cf27fc7fb2bf0e2ce5fe0de5545e4d412ba54c209f9","52800b74e97d62cd27f91a19ace28ca7ed32084fc5de80b015c8b62aabb4de99","2eba4de3285ccf1518aa5d87c683e4c4da38a837f69e112710fb107c58e86b9f","7b1267119c9c7c148ee973f8affd943c49f7ec2f5573f83cee25139492b533cd","3c73521cd265c18ed3aca9460bf298e5ed4a147aa3340f30ad7f1d9be05f726b","027d78906c03890d8473731baca3acad76095aa2e68af1c6fcd32ded61d9a430","5eb3db8ef1b8f4eb5b16facea0a1cc3d9c22d6513de77a29c6630233c7ccf888","448bf4331abf7995b2ab5c4a449800e35fc3dbcfb522ed752d84564fd7d17374","3147a65dfdc1827b3a1b3899c5b316e8cc10eeb66f5c26c758bb24b2c962983a","845075e15760edf65e31220cbfc67b0bd436be0cd169181aa524dcf8987ff09e","74427eecc65d24613d8483cb6191d32cb91aa79c2b13084ed2062457e3aa0376","1c745d75f93f62d55ff159a6091c469b05be5fad36e4ded4ce249e7bbdb36f33",{"version":"ee2f644177ac7b3a3103ce205a9ef175f78b8eca8e3aff22e5d566cadfeabba8","signature":"cbfcbe7513193695f971d0f8f16b74a15db97c0078006d0414ea4831c0847115"},{"version":"a93bca508da4f0b549b4754d6c0fb831fae64b5f207f4e9d2c97cc4f41209226","signature":"e1696578360dd48403b052e55ebf8528d7a9da2042d8bacc936a3c1f2f7b9ea3"},{"version":"afed0880319d48732105dcd665a9f4dcfa1a46b5ed644a5db3aa7b7f5ec09d68","signature":"273b0b65a6f4847bdc73d02fcf48febd9eb46892c988971b8fe7c4e7a8bbe4db"},{"version":"a0ffa57525eea3df5ac85856ed662c68ceabdc91617a0041d31a24199a92fb44","signature":"cda7ab2d0e9fdf59864625e22e113190ee4b2222ac6bad6dd3c194a883945085"}],"root":[[80,83]],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"declaration":true,"esModuleInterop":true,"experimentalDecorators":true,"module":99,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","skipLibCheck":true,"strict":true,"target":1},"fileIdsList":[[67,72],[66,72],[66,67,68,69,70,71],[65,66,67,69,71,72,73,74,75,76,77],[65,67,72],[66,67,72],[78,81],[80,81,82],[79,80,82],[82],[78],[80,82]],"referencedMap":[[68,1],[73,1],[69,1],[67,2],[70,1],[71,1],[74,1],[75,1],[76,1],[77,1],[72,3],[78,4],[66,5],[65,6],[82,7],[83,8],[81,9],[80,10]],"exportedModulesMap":[[68,1],[73,1],[69,1],[67,2],[70,1],[71,1],[74,1],[75,1],[76,1],[77,1],[72,3],[78,4],[66,5],[65,6],[82,11],[83,8],[81,12],[80,10]],"semanticDiagnosticsPerFile":[68,73,69,67,70,71,74,75,76,77,72,78,66,65,79,63,64,12,14,13,2,15,16,17,18,19,20,21,22,3,4,23,27,24,25,26,28,29,30,5,31,32,33,34,6,38,35,36,37,39,7,40,45,46,41,42,43,44,8,50,47,48,49,51,9,52,53,54,57,55,56,58,59,10,1,11,62,61,60,82,83,81,80]},"version":"5.3.3"}
1
+ {"program":{"fileNames":["../node_modules/typescript/lib/lib.es5.d.ts","../node_modules/typescript/lib/lib.es2015.d.ts","../node_modules/typescript/lib/lib.es2016.d.ts","../node_modules/typescript/lib/lib.es2017.d.ts","../node_modules/typescript/lib/lib.es2018.d.ts","../node_modules/typescript/lib/lib.es2019.d.ts","../node_modules/typescript/lib/lib.es2020.d.ts","../node_modules/typescript/lib/lib.es2021.d.ts","../node_modules/typescript/lib/lib.es2022.d.ts","../node_modules/typescript/lib/lib.es2023.d.ts","../node_modules/typescript/lib/lib.esnext.d.ts","../node_modules/typescript/lib/lib.dom.d.ts","../node_modules/typescript/lib/lib.es2015.core.d.ts","../node_modules/typescript/lib/lib.es2015.collection.d.ts","../node_modules/typescript/lib/lib.es2015.generator.d.ts","../node_modules/typescript/lib/lib.es2015.iterable.d.ts","../node_modules/typescript/lib/lib.es2015.promise.d.ts","../node_modules/typescript/lib/lib.es2015.proxy.d.ts","../node_modules/typescript/lib/lib.es2015.reflect.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.d.ts","../node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2016.array.include.d.ts","../node_modules/typescript/lib/lib.es2017.date.d.ts","../node_modules/typescript/lib/lib.es2017.object.d.ts","../node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2017.string.d.ts","../node_modules/typescript/lib/lib.es2017.intl.d.ts","../node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../node_modules/typescript/lib/lib.es2018.intl.d.ts","../node_modules/typescript/lib/lib.es2018.promise.d.ts","../node_modules/typescript/lib/lib.es2018.regexp.d.ts","../node_modules/typescript/lib/lib.es2019.array.d.ts","../node_modules/typescript/lib/lib.es2019.object.d.ts","../node_modules/typescript/lib/lib.es2019.string.d.ts","../node_modules/typescript/lib/lib.es2019.symbol.d.ts","../node_modules/typescript/lib/lib.es2019.intl.d.ts","../node_modules/typescript/lib/lib.es2020.bigint.d.ts","../node_modules/typescript/lib/lib.es2020.date.d.ts","../node_modules/typescript/lib/lib.es2020.promise.d.ts","../node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2020.string.d.ts","../node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../node_modules/typescript/lib/lib.es2020.intl.d.ts","../node_modules/typescript/lib/lib.es2020.number.d.ts","../node_modules/typescript/lib/lib.es2021.promise.d.ts","../node_modules/typescript/lib/lib.es2021.string.d.ts","../node_modules/typescript/lib/lib.es2021.weakref.d.ts","../node_modules/typescript/lib/lib.es2021.intl.d.ts","../node_modules/typescript/lib/lib.es2022.array.d.ts","../node_modules/typescript/lib/lib.es2022.error.d.ts","../node_modules/typescript/lib/lib.es2022.intl.d.ts","../node_modules/typescript/lib/lib.es2022.object.d.ts","../node_modules/typescript/lib/lib.es2022.sharedmemory.d.ts","../node_modules/typescript/lib/lib.es2022.string.d.ts","../node_modules/typescript/lib/lib.es2022.regexp.d.ts","../node_modules/typescript/lib/lib.es2023.array.d.ts","../node_modules/typescript/lib/lib.es2023.collection.d.ts","../node_modules/typescript/lib/lib.esnext.intl.d.ts","../node_modules/typescript/lib/lib.esnext.disposable.d.ts","../node_modules/typescript/lib/lib.esnext.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.d.ts","../node_modules/typescript/lib/lib.decorators.legacy.d.ts","../node_modules/toosoon-gui/lib/wrapper.d.ts","../node_modules/toosoon-gui/lib/types.d.ts","../node_modules/toosoon-gui/lib/controllers/controller.d.ts","../node_modules/toosoon-gui/lib/controllers/angle-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/color-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/coords-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/file-controller.d.ts","../node_modules/toosoon-gui/lib/gui.d.ts","../node_modules/toosoon-gui/lib/controllers/boolean-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/function-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/number-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/option-controller.d.ts","../node_modules/toosoon-gui/lib/controllers/string-controller.d.ts","../node_modules/toosoon-gui/lib/index.d.ts","../node_modules/toosoon-utils/lib/prng.d.ts","../src/types.ts","../src/prng.ts","../src/controllers.ts","../src/index.ts"],"fileInfos":[{"version":"f33e5332b24c3773e930e212cbb8b6867c8ba3ec4492064ea78e55a524d57450","affectsGlobalScope":true},"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","26f2f787e82c4222710f3b676b4d83eb5ad0a72fa7b746f03449e7a026ce5073","9a68c0c07ae2fa71b44384a839b7b8d81662a236d4b9ac30916718f7510b1b2d","5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","feecb1be483ed332fad555aff858affd90a48ab19ba7272ee084704eb7167569","5514e54f17d6d74ecefedc73c504eadffdeda79c7ea205cf9febead32d45c4bc","1c0cdb8dc619bc549c3e5020643e7cf7ae7940058e8c7e5aefa5871b6d86f44b","bed7b7ba0eb5a160b69af72814b4dde371968e40b6c5e73d3a9f7bee407d158c",{"version":"21e41a76098aa7a191028256e52a726baafd45a925ea5cf0222eb430c96c1d83","affectsGlobalScope":true},{"version":"138fb588d26538783b78d1e3b2c2cc12d55840b97bf5e08bca7f7a174fbe2f17","affectsGlobalScope":true},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true},{"version":"4443e68b35f3332f753eacc66a04ac1d2053b8b035a0e0ac1d455392b5e243b3","affectsGlobalScope":true},{"version":"bc47685641087c015972a3f072480889f0d6c65515f12bd85222f49a98952ed7","affectsGlobalScope":true},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true},{"version":"93495ff27b8746f55d19fcbcdbaccc99fd95f19d057aed1bd2c0cafe1335fbf0","affectsGlobalScope":true},{"version":"6fc23bb8c3965964be8c597310a2878b53a0306edb71d4b5a4dfe760186bcc01","affectsGlobalScope":true},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true},{"version":"bb42a7797d996412ecdc5b2787720de477103a0b2e53058569069a0e2bae6c7e","affectsGlobalScope":true},{"version":"4738f2420687fd85629c9efb470793bb753709c2379e5f85bc1815d875ceadcd","affectsGlobalScope":true},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true},{"version":"9fc46429fbe091ac5ad2608c657201eb68b6f1b8341bd6d670047d32ed0a88fa","affectsGlobalScope":true},{"version":"61c37c1de663cf4171e1192466e52c7a382afa58da01b1dc75058f032ddf0839","affectsGlobalScope":true},{"version":"b541a838a13f9234aba650a825393ffc2292dc0fc87681a5d81ef0c96d281e7a","affectsGlobalScope":true},{"version":"e0275cd0e42990dc3a16f0b7c8bca3efe87f1c8ad404f80c6db1c7c0b828c59f","affectsGlobalScope":true},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true},{"version":"49ed889be54031e1044af0ad2c603d627b8bda8b50c1a68435fe85583901d072","affectsGlobalScope":true},{"version":"e93d098658ce4f0c8a0779e6cab91d0259efb88a318137f686ad76f8410ca270","affectsGlobalScope":true},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true},{"version":"bf14a426dbbf1022d11bd08d6b8e709a2e9d246f0c6c1032f3b2edb9a902adbe","affectsGlobalScope":true},{"version":"ec0104fee478075cb5171e5f4e3f23add8e02d845ae0165bfa3f1099241fa2aa","affectsGlobalScope":true},{"version":"2b72d528b2e2fe3c57889ca7baef5e13a56c957b946906d03767c642f386bbc3","affectsGlobalScope":true},{"version":"acae90d417bee324b1372813b5a00829d31c7eb670d299cd7f8f9a648ac05688","affectsGlobalScope":true},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true},{"version":"af3dd424cf267428f30ccfc376f47a2c0114546b55c44d8c0f1d57d841e28d74","affectsGlobalScope":true},{"version":"995c005ab91a498455ea8dfb63aa9f83fa2ea793c3d8aa344be4a1678d06d399","affectsGlobalScope":true},{"version":"51e547984877a62227042850456de71a5c45e7fe86b7c975c6e68896c86fa23b","affectsGlobalScope":true},{"version":"62a4966981264d1f04c44eb0f4b5bdc3d81c1a54725608861e44755aa24ad6a5","affectsGlobalScope":true},{"version":"4fa6ed14e98aa80b91f61b9805c653ee82af3502dc21c9da5268d3857772ca05","affectsGlobalScope":true},{"version":"e6633e05da3ff36e6da2ec170d0d03ccf33de50ca4dc6f5aeecb572cedd162fb","affectsGlobalScope":true},{"version":"86a34c7a13de9cabc43161348f663624b56871ed80986e41d214932ddd8d6719","affectsGlobalScope":true},{"version":"8444af78980e3b20b49324f4a16ba35024fef3ee069a0eb67616ea6ca821c47a","affectsGlobalScope":true},{"version":"caccc56c72713969e1cfe5c3d44e5bab151544d9d2b373d7dbe5a1e4166652be","affectsGlobalScope":true},{"version":"3287d9d085fbd618c3971944b65b4be57859f5415f495b33a6adc994edd2f004","affectsGlobalScope":true},{"version":"50d53ccd31f6667aff66e3d62adf948879a3a16f05d89882d1188084ee415bbc","affectsGlobalScope":true},{"version":"08a58483392df5fcc1db57d782e87734f77ae9eab42516028acbfe46f29a3ef7","affectsGlobalScope":true},{"version":"436aaf437562f276ec2ddbee2f2cdedac7664c1e4c1d2c36839ddd582eeb3d0a","affectsGlobalScope":true},{"version":"13f6e6380c78e15e140243dc4be2fa546c287c6d61f4729bc2dd7cf449605471","affectsGlobalScope":true},{"version":"4350e5922fecd4bedda2964d69c213a1436349d0b8d260dd902795f5b94dc74b","affectsGlobalScope":true},{"version":"d4b1d2c51d058fc21ec2629fff7a76249dec2e36e12960ea056e3ef89174080f","affectsGlobalScope":true},{"version":"33358442698bb565130f52ba79bfd3d4d484ac85fe33f3cb1759c54d18201393","affectsGlobalScope":true},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true},"7f3b56b751819dfc3d25393d8232f400b8cbef152423e71d1e4e5db81cf2e2db","f7e25ae88d386440b751e25f12ec98bdd80822c54e58ed3cb80cc306ae9510e6","32c3a14e4806136096ba2da0c5101889803156a384c25c81d67e872e3be0d3ba","6339a44514a06c5e8f726cf27fc7fb2bf0e2ce5fe0de5545e4d412ba54c209f9","52800b74e97d62cd27f91a19ace28ca7ed32084fc5de80b015c8b62aabb4de99","2eba4de3285ccf1518aa5d87c683e4c4da38a837f69e112710fb107c58e86b9f","7b1267119c9c7c148ee973f8affd943c49f7ec2f5573f83cee25139492b533cd","3c73521cd265c18ed3aca9460bf298e5ed4a147aa3340f30ad7f1d9be05f726b","027d78906c03890d8473731baca3acad76095aa2e68af1c6fcd32ded61d9a430","5eb3db8ef1b8f4eb5b16facea0a1cc3d9c22d6513de77a29c6630233c7ccf888","448bf4331abf7995b2ab5c4a449800e35fc3dbcfb522ed752d84564fd7d17374","3147a65dfdc1827b3a1b3899c5b316e8cc10eeb66f5c26c758bb24b2c962983a","845075e15760edf65e31220cbfc67b0bd436be0cd169181aa524dcf8987ff09e","74427eecc65d24613d8483cb6191d32cb91aa79c2b13084ed2062457e3aa0376","bfbf0986270057216327e240d192582c2e1ad64f995251a8e99ef655ae3174f9",{"version":"ee2f644177ac7b3a3103ce205a9ef175f78b8eca8e3aff22e5d566cadfeabba8","signature":"cbfcbe7513193695f971d0f8f16b74a15db97c0078006d0414ea4831c0847115"},{"version":"fdfa07295e9e5e659b416ae8dea7aa759d7ac9ba87097a29cda1aef00cb03e25","signature":"9f91ac498d57a6d0566505dce8ae83eef584b9622cda8418e39b23e76dc4ca68"},{"version":"6aa99d22275a03a2ddddbc13d95f5e9f61cfd3a67463ce3afbf8fd7cff5010a5","signature":"865ca0437ddfa0f4029b468c4fa89c140d9f5c0b06e86877c4bfdad7f528db1e"},{"version":"a0ffa57525eea3df5ac85856ed662c68ceabdc91617a0041d31a24199a92fb44","signature":"cda7ab2d0e9fdf59864625e22e113190ee4b2222ac6bad6dd3c194a883945085"}],"root":[[80,83]],"options":{"allowJs":true,"allowSyntheticDefaultImports":true,"declaration":true,"esModuleInterop":true,"experimentalDecorators":true,"module":99,"noUnusedLocals":true,"noUnusedParameters":true,"outDir":"./","skipLibCheck":true,"strict":true,"target":1},"fileIdsList":[[67,72],[66,72],[66,67,68,69,70,71],[65,66,67,69,71,72,73,74,75,76,77],[65,67,72],[66,67,72],[78,81],[80,81,82],[79,80,82],[82],[78],[80,82]],"referencedMap":[[68,1],[73,1],[69,1],[67,2],[70,1],[71,1],[74,1],[75,1],[76,1],[77,1],[72,3],[78,4],[66,5],[65,6],[82,7],[83,8],[81,9],[80,10]],"exportedModulesMap":[[68,1],[73,1],[69,1],[67,2],[70,1],[71,1],[74,1],[75,1],[76,1],[77,1],[72,3],[78,4],[66,5],[65,6],[82,11],[83,8],[81,12],[80,10]],"semanticDiagnosticsPerFile":[68,73,69,67,70,71,74,75,76,77,72,78,66,65,79,63,64,12,14,13,2,15,16,17,18,19,20,21,22,3,4,23,27,24,25,26,28,29,30,5,31,32,33,34,6,38,35,36,37,39,7,40,45,46,41,42,43,44,8,50,47,48,49,51,9,52,53,54,57,55,56,58,59,10,1,11,62,61,60,82,83,81,80]},"version":"5.3.3"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "toosoon-prng",
3
- "version": "1.4.0",
4
- "description": "This project provides a `PRNG` instance and a set of `Controllers` for generating pseudo-random values using a seed-based approach and various algorithms",
3
+ "version": "1.5.0",
4
+ "description": "This project provides a PRNG instance and a set of Controllers for generating pseudo-random values using a seed-based approach and various algorithms",
5
5
  "main": "./lib/index.js",
6
6
  "types": "./lib/index.d.ts",
7
7
  "scripts": {
@@ -29,7 +29,7 @@
29
29
  "homepage": "https://github.com/toosoon-dev/toosoon-prng#readme",
30
30
  "dependencies": {
31
31
  "toosoon-gui": "^1.3.0",
32
- "toosoon-utils": "^1.3.0"
32
+ "toosoon-utils": "^1.4.0"
33
33
  },
34
34
  "devDependencies": {
35
35
  "typescript": "^5.3.3"
@@ -229,9 +229,9 @@ export class ItemController<T = unknown> extends BasePRNGController<T> {
229
229
 
230
230
  export class ObjectPropertyController<T = unknown> extends BasePRNGController<T> {
231
231
  value: T;
232
- object: { [key: string]: T };
232
+ object: Record<string, T>;
233
233
 
234
- constructor(seed: string, object: { [key: string]: T }) {
234
+ constructor(seed: string, object: Record<string, T>) {
235
235
  super(seed);
236
236
 
237
237
  this.object = object;
@@ -379,10 +379,10 @@ export class ItemGroupController<T = unknown> extends BasePRNGGroupController<T>
379
379
  }
380
380
 
381
381
  export class ObjectPropertyGroupController<T = unknown> extends BasePRNGGroupController<T> {
382
- object: { [key: string]: T };
382
+ object: Record<string, T>;
383
383
  controllers: ObjectPropertyController<T>[] = [];
384
384
 
385
- constructor(seed: string, object: { [key: string]: T }) {
385
+ constructor(seed: string, object: Record<string, T>) {
386
386
  super(seed);
387
387
 
388
388
  this.object = object;
package/src/prng.ts CHANGED
@@ -1,16 +1,16 @@
1
- import { cyrb128, jsf32, mulberry32, sfc32, splitmix32, xoshiro128ss } from 'toosoon-utils/prng';
1
+ import { jsf32, mulberry32, sfc32, splitmix32, xoshiro128ss, random } from 'toosoon-utils/prng';
2
2
 
3
3
  import { PRNGController } from './controllers';
4
4
  import { Algorithm } from './types';
5
5
 
6
6
  /**
7
- * PRNG class
7
+ * Utility class for generating pseudo-random values
8
8
  *
9
9
  * @class PRNG
10
10
  */
11
11
  class PRNG {
12
12
  public seed: string = '';
13
- public algorithm: Algorithm = Algorithm.splitmix32;
13
+ public algorithm: (...args: number[]) => number = splitmix32;
14
14
  public controllers: PRNGController[] = [];
15
15
 
16
16
  /**
@@ -49,7 +49,7 @@ class PRNG {
49
49
  * @param {Algorithm} algorithm Algorithm name
50
50
  */
51
51
  public setAlgorithm(algorithm: Algorithm): void {
52
- this.algorithm = algorithm;
52
+ this.algorithm = this.getAlgorithm(algorithm);
53
53
  this.controllers.forEach((controller) => controller.getValue());
54
54
  }
55
55
 
@@ -61,19 +61,7 @@ class PRNG {
61
61
  * @returns {number}
62
62
  */
63
63
  public random(seed: string): number {
64
- const hashes = cyrb128(this.seed + seed);
65
- switch (this.algorithm) {
66
- case Algorithm.splitmix32:
67
- return splitmix32(hashes[0]);
68
- case Algorithm.jsf32:
69
- return jsf32(hashes[0], hashes[1], hashes[2], hashes[3]);
70
- case Algorithm.mulberry32:
71
- return mulberry32(hashes[0]);
72
- case Algorithm.sfc32:
73
- return sfc32(hashes[0], hashes[1], hashes[2], hashes[3]);
74
- case Algorithm.xoshiro128ss:
75
- return xoshiro128ss(hashes[0], hashes[1], hashes[2], hashes[3]);
76
- }
64
+ return random({ seed: this.seed + seed, algorithm: this.algorithm });
77
65
  }
78
66
 
79
67
  /**
@@ -152,7 +140,7 @@ class PRNG {
152
140
  * @param {object} object Object to pick the property from
153
141
  * @returns {T|undefined} Random item picked
154
142
  */
155
- public randomObjectProperty<T = unknown>(seed: string, object: { [key: string]: T }): T | undefined {
143
+ public randomObjectProperty<T = unknown>(seed: string, object: Record<string, T>): T | undefined {
156
144
  const keys = Object.keys(object);
157
145
  const key = this.randomItem(seed, keys);
158
146
  if (key && object.hasOwnProperty(key)) {
@@ -177,14 +165,35 @@ class PRNG {
177
165
 
178
166
  if (totalWeight <= 0) console.warn('PRNG.randomIndex()', 'Weights must sum to > 0', totalWeight);
179
167
 
180
- let random = this.random(seed) * totalWeight;
168
+ let weight = this.random(seed) * totalWeight;
181
169
  for (let i = 0; i < weights.length; i++) {
182
- if (random < weights[i]) return i;
183
- random -= weights[i];
170
+ if (weight < weights[i]) return i;
171
+ weight -= weights[i];
184
172
  }
185
173
 
186
174
  return 0;
187
175
  }
176
+
177
+ /**
178
+ * Get the PRNG algorithm function by its name
179
+ *
180
+ * @param {Algorithm} algorithm Algorithm name
181
+ * @returns {Function} PRNG algorithm function
182
+ */
183
+ private getAlgorithm(algorithm: Algorithm): (...args: number[]) => number {
184
+ switch (algorithm) {
185
+ case Algorithm.splitmix32:
186
+ return splitmix32;
187
+ case Algorithm.jsf32:
188
+ return jsf32;
189
+ case Algorithm.mulberry32:
190
+ return mulberry32;
191
+ case Algorithm.sfc32:
192
+ return sfc32;
193
+ case Algorithm.xoshiro128ss:
194
+ return xoshiro128ss;
195
+ }
196
+ }
188
197
  }
189
198
 
190
199
  const prng = new PRNG();