79 lines
1.9 KiB
JavaScript
79 lines
1.9 KiB
JavaScript
export class OseDice {
|
|
// eslint-disable-next-line no-unused-vars
|
|
static async Roll({
|
|
parts = [],
|
|
data = {},
|
|
options = {},
|
|
event = null,
|
|
speaker = null,
|
|
flavor = null,
|
|
title = null,
|
|
item = false,
|
|
} = {}) {
|
|
let rollMode = game.settings.get("core", "rollMode");
|
|
let rolled = false;
|
|
let filtered = parts.filter(function (el) {
|
|
return el != "" && el;
|
|
});
|
|
|
|
const _roll = (form = null, raise = false) => {
|
|
// Optionally include a situational bonus
|
|
if (form !== null) data["bonus"] = form.bonus.value;
|
|
if (data["bonus"]) filtered.push(data["bonus"]);
|
|
|
|
const roll = new Roll(filtered.join(""), data).roll();
|
|
// Convert the roll to a chat message and return the roll
|
|
rollMode = form ? form.rollMode.value : rollMode;
|
|
roll.toMessage(
|
|
{
|
|
speaker: speaker,
|
|
flavor: flavor,
|
|
},
|
|
{ rollMode }
|
|
);
|
|
rolled = true;
|
|
return roll;
|
|
};
|
|
|
|
const template = "systems/ose/templates/chat/roll-dialog.html";
|
|
let dialogData = {
|
|
formula: filtered.join(" "),
|
|
data: data,
|
|
rollMode: rollMode,
|
|
rollModes: CONFIG.Dice.rollModes,
|
|
};
|
|
|
|
let buttons = {
|
|
ok: {
|
|
label: game.i18n.localize("OSE.Roll"),
|
|
icon: '<i class="fas fa-dice-d20"></i>',
|
|
callback: (html) => {
|
|
roll = _roll(html[0].children[0]);
|
|
},
|
|
},
|
|
cancel: {
|
|
icon: '<i class="fas fa-times"></i>',
|
|
label: game.i18n.localize("OSE.Cancel"),
|
|
},
|
|
};
|
|
|
|
if (!item) delete buttons.raise;
|
|
|
|
const html = await renderTemplate(template, dialogData);
|
|
let roll;
|
|
|
|
//Create Dialog window
|
|
return new Promise((resolve) => {
|
|
new Dialog({
|
|
title: title,
|
|
content: html,
|
|
buttons: buttons,
|
|
default: "ok",
|
|
close: () => {
|
|
resolve(rolled ? roll : false)
|
|
},
|
|
}).render(true);
|
|
});
|
|
}
|
|
}
|