/// class OneOf { private possibilities = []; private availablePossibilites; private randomMode : number; public static PURELY_AT_RANDOM : number = 0; public static ROTATING_RANDOM : number = 1; public static CYCLING : number = 2; private cyclingOrder : number = 0; public constructor (randomMode : number, ...poss : Array) { this.randomMode = randomMode; this.addPossibilities(...poss); } public addPossibilities (...poss : Array) { this.possibilities.push(...poss); this.updatePossibilities(); } public updatePossibilities () { if (this.randomMode == OneOf.ROTATING_RANDOM) { this.availablePossibilites = this.possibilities.slice(); } } public getOne () { if (this.randomMode == OneOf.PURELY_AT_RANDOM) { return this.possibilities[Math.floor(Math.random() * this.possibilities.length)]; } else if (this.randomMode == OneOf.ROTATING_RANDOM) { if (this.availablePossibilites.length < 1) { this.availablePossibilites = this.possibilities.slice(); } return this.availablePossibilites.splice(Math.floor(Math.random() * this.availablePossibilites.length), 1)[0] } else if (this.randomMode == OneOf.CYCLING) { var r = this.possibilities[this.cyclingOrder++]; if (this.cyclingOrder > this.possibilities.length) { this.cyclingOrder = 0; } return r; } } }