Initial
This commit is contained in:
62
resources/app/client-esm/dice/terms/fate.mjs
Normal file
62
resources/app/client-esm/dice/terms/fate.mjs
Normal file
@@ -0,0 +1,62 @@
|
||||
import DiceTerm from "./dice.mjs";
|
||||
import Die from "./die.mjs";
|
||||
|
||||
/**
|
||||
* A type of DiceTerm used to represent a three-sided Fate/Fudge die.
|
||||
* Mathematically behaves like 1d3-2
|
||||
* @extends {DiceTerm}
|
||||
*/
|
||||
export default class FateDie extends DiceTerm {
|
||||
constructor(termData) {
|
||||
termData.faces = 3;
|
||||
super(termData);
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
static DENOMINATION = "f";
|
||||
|
||||
/** @inheritdoc */
|
||||
static MODIFIERS = {
|
||||
"r": Die.prototype.reroll,
|
||||
"rr": Die.prototype.rerollRecursive,
|
||||
"k": Die.prototype.keep,
|
||||
"kh": Die.prototype.keep,
|
||||
"kl": Die.prototype.keep,
|
||||
"d": Die.prototype.drop,
|
||||
"dh": Die.prototype.drop,
|
||||
"dl": Die.prototype.drop
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/** @inheritdoc */
|
||||
async roll({minimize=false, maximize=false, ...options}={}) {
|
||||
const roll = {result: undefined, active: true};
|
||||
if ( minimize ) roll.result = -1;
|
||||
else if ( maximize ) roll.result = 1;
|
||||
else roll.result = await this._roll(options);
|
||||
if ( roll.result === undefined ) roll.result = this.randomFace();
|
||||
if ( roll.result === -1 ) roll.failure = true;
|
||||
if ( roll.result === 1 ) roll.success = true;
|
||||
this.results.push(roll);
|
||||
return roll;
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/** @override */
|
||||
mapRandomFace(randomUniform) {
|
||||
return Math.ceil((randomUniform * this.faces) - 2);
|
||||
}
|
||||
|
||||
/* -------------------------------------------- */
|
||||
|
||||
/** @inheritdoc */
|
||||
getResultLabel(result) {
|
||||
return {
|
||||
"-1": "-",
|
||||
"0": " ",
|
||||
"1": "+"
|
||||
}[result.result];
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user