"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); var multi_random_runner_exports = {}; __export(multi_random_runner_exports, { MultiRandomRunner: () => MultiRandomRunner }); module.exports = __toCommonJS(multi_random_runner_exports); var import_prng = require("../prng"); var import_runner = require("./runner"); /** * Battle Simulator multi random runner. * Pokemon Showdown - http://pokemonshowdown.com/ * * @license MIT */ const _MultiRandomRunner = class { constructor(options) { this.options = { ...options }; this.totalGames = options.totalGames; this.prng = import_prng.PRNG.get(options.prng); this.options.prng = this.prng; this.format = options.format; this.cycle = !!options.cycle; this.all = !!options.all; this.isAsync = !!options.async; this.formatIndex = 0; this.numGames = 0; } async run() { let games = []; let format; let lastFormat = false; let failures = 0; while (format = this.getNextFormat()) { if (this.all && lastFormat && format !== lastFormat) { if (this.isAsync) await Promise.all(games); games = []; } const seed = this.prng.getSeed(); const game = new import_runner.Runner({ format, ...this.options }).run().catch((err) => { failures++; console.error( `Run \`node tools/simulate multi 1 --format=${format} --seed=${seed}\` to debug (optionally with \`--output\` and/or \`--input\` for more info): `, err ); }); if (!this.isAsync) await game; games.push(game); lastFormat = format; } if (this.isAsync) await Promise.all(games); return failures; } getNextFormat() { const FORMATS = _MultiRandomRunner.FORMATS; if (this.formatIndex > FORMATS.length) return false; if (this.numGames++ < this.totalGames) { if (this.format) { return this.format; } else if (this.all) { return FORMATS[this.formatIndex]; } else if (this.cycle) { const format = FORMATS[this.formatIndex]; this.formatIndex = (this.formatIndex + 1) % FORMATS.length; return format; } else { return this.prng.sample(FORMATS); } } else if (this.all) { this.numGames = 1; this.formatIndex++; return FORMATS[this.formatIndex]; } return false; } }; let MultiRandomRunner = _MultiRandomRunner; MultiRandomRunner.FORMATS = [ "gen8randombattle", "gen8randomdoublesbattle", "gen8battlefactory", "gen7randombattle", "gen7battlefactory", "gen6randombattle", "gen6battlefactory", "gen5randombattle", "gen4randombattle", "gen3randombattle", "gen2randombattle", "gen1randombattle" ]; //# sourceMappingURL=multi-random-runner.js.map