123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- /// <reference path="../Say.ts" />
- 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<any>) {
- this.randomMode = randomMode;
- this.addPossibilities(...poss);
- }
- public addPossibilities (...poss : Array<any>) {
- 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;
- }
- }
- }
|