@seroh/roll
Version:
An RPG dice-rolling library with a variety of built-in roll mechanics.
41 lines • 1.52 kB
JavaScript
import { AdvantageMechanic } from "../mechanic/AdvantageMechanic";
import { DisadvantageMechanic } from "../mechanic/DisadvantageMechanic";
import { Mechanic } from "../mechanic/Mechanic";
import { SingleRollMechanic } from "../mechanic/SingleRollMechanic";
import { SimpleRandomizer } from "../randomizer/SimpleRandomizer";
export class Roll {
min;
max;
randomizer;
mechanic;
constructor(min, max, defaults = {}) {
this.min = min;
this.max = max;
this.randomizer = defaults.randomizer || new SimpleRandomizer();
this.mechanic = defaults.mechanic instanceof Mechanic ? defaults.mechanic : new SingleRollMechanic();
}
roll(modifier = 0, overrideDefaults = {}) {
const mechanic = overrideDefaults.mechanic || this.mechanic;
const randomizer = overrideDefaults.randomizer || this.randomizer;
const { result: natural, rolls } = mechanic.do(this.min, this.max, randomizer);
const modified = natural + (modifier || 0);
return {
natural,
modified,
rolls,
};
}
rollAdvantage(modifier, overrideDefaults = {}) {
return this.roll(modifier, {
...overrideDefaults,
mechanic: new AdvantageMechanic(),
});
}
rollDisadvantage(modifier, overrideDefaults = {}) {
return this.roll(modifier, {
...overrideDefaults,
mechanic: new DisadvantageMechanic(),
});
}
}
//# sourceMappingURL=Roll.js.map