81 lines
2.9 KiB
JavaScript
81 lines
2.9 KiB
JavaScript
import { EcrymeUtility } from "../common/ecryme-utility.js";
|
|
import { EcrymeConfrontDialog } from "./ecryme-confront-dialog.js";
|
|
|
|
const { HandlebarsApplicationMixin } = foundry.applications.api
|
|
|
|
/**
|
|
* Confrontation start dialog — Application V2 version.
|
|
* Player picks which dice formula to roll (normal / spleen / ideal),
|
|
* the dice are rolled and the main EcrymeConfrontDialog is opened.
|
|
*/
|
|
export class EcrymeConfrontStartDialog extends HandlebarsApplicationMixin(foundry.applications.api.ApplicationV2) {
|
|
|
|
/** @override */
|
|
static DEFAULT_OPTIONS = {
|
|
classes: ["fvtt-ecryme", "ecryme-confront-start-dialog"],
|
|
position: { width: 540 },
|
|
window: { title: "ECRY.ui.confront" },
|
|
actions: {
|
|
rollNormal: EcrymeConfrontStartDialog.#onRollNormal,
|
|
rollSpleen: EcrymeConfrontStartDialog.#onRollSpleen,
|
|
rollIdeal: EcrymeConfrontStartDialog.#onRollIdeal,
|
|
cancel: EcrymeConfrontStartDialog.#onCancel,
|
|
},
|
|
}
|
|
|
|
/** @override */
|
|
static PARTS = {
|
|
content: { template: "systems/fvtt-ecryme/templates/dialogs/confront-start-dialog.hbs" },
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
constructor(actor, rollData, options = {}) {
|
|
super(options)
|
|
this.actor = actor?.token?.actor ?? actor
|
|
this.rollData = rollData
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
static async create(actor, rollData) {
|
|
if (!actor) throw new Error("Ecryme | No actor provided for confront dialog")
|
|
if (!rollData) throw new Error("Ecryme | No roll data provided for confront dialog")
|
|
if (actor?.token) rollData.tokenId = actor.token.id
|
|
return new EcrymeConfrontStartDialog(actor, rollData)
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
async _prepareContext() {
|
|
return {
|
|
...this.rollData,
|
|
config: game.system.ecryme.config,
|
|
}
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
async #rollConfront(diceFormula) {
|
|
const myRoll = await new Roll(diceFormula).roll()
|
|
await EcrymeUtility.showDiceSoNice(myRoll, game.settings.get("core", "rollMode"))
|
|
|
|
const rollData = this.rollData
|
|
rollData.roll = foundry.utils.duplicate(myRoll)
|
|
rollData.availableDices = []
|
|
for (const result of myRoll.terms[0].results) {
|
|
if (!result.discarded) {
|
|
const dup = foundry.utils.duplicate(result)
|
|
dup.location = "mainpool"
|
|
rollData.availableDices.push(dup)
|
|
}
|
|
}
|
|
|
|
const confrontDialog = await EcrymeConfrontDialog.create(this.actor, rollData)
|
|
confrontDialog.render(true)
|
|
this.close()
|
|
}
|
|
|
|
/* -------------------------------------------- */
|
|
static async #onRollNormal(event, target) { await this.#rollConfront("4d6") }
|
|
static async #onRollSpleen(event, target) { await this.#rollConfront("5d6kl4") }
|
|
static async #onRollIdeal(event, target) { await this.#rollConfront("5d6kh4") }
|
|
static #onCancel(event, target) { this.close() }
|
|
}
|