93 lines
2.7 KiB
JavaScript
93 lines
2.7 KiB
JavaScript
export let RollHandler = null
|
|
|
|
Hooks.once('tokenActionHudCoreApiReady', async (coreModule) => {
|
|
RollHandler = class RollHandler extends coreModule.api.RollHandler {
|
|
|
|
/** @override */
|
|
async handleActionClick(event, encodedValue) {
|
|
const [actionTypeId, actionId] = encodedValue.split(this.delimiter ?? '|')
|
|
|
|
if (this.actor) {
|
|
await this.#handleAction(event, this.actor, this.token, actionTypeId, actionId)
|
|
return
|
|
}
|
|
|
|
const knownTypes = ['character', 'creature']
|
|
for (const token of canvas.tokens.controlled.filter(t => knownTypes.includes(t.actor?.type))) {
|
|
await this.#handleAction(event, token.actor, token, actionTypeId, actionId)
|
|
}
|
|
}
|
|
|
|
/** @override */
|
|
async handleActionHover(event, encodedValue) {}
|
|
|
|
/** @override */
|
|
async handleGroupClick(event, group) {}
|
|
|
|
async #handleAction(event, actor, token, actionTypeId, actionId) {
|
|
switch (actionTypeId) {
|
|
case 'attribute':
|
|
await actor.rollAttribute(actionId)
|
|
break
|
|
case 'hp':
|
|
await this.#handleHP(actor, actionId)
|
|
break
|
|
case 'flow':
|
|
await this.#handleFlow(actor, actionId)
|
|
break
|
|
case 'weapon':
|
|
await this.#handleWeapon(actor, actionId)
|
|
break
|
|
case 'condition':
|
|
await actor.toggleStatusEffect(actionId)
|
|
break
|
|
case 'ability':
|
|
await actor.useAbility(actionId)
|
|
break
|
|
case 'kit':
|
|
await actor.useKit(actionId)
|
|
break
|
|
case 'utility':
|
|
await this.#handleUtility(actor, token, actionId)
|
|
break
|
|
}
|
|
}
|
|
|
|
async #handleHP(actor, actionId) {
|
|
if (actionId === 'display') return
|
|
const hp = actor.system.hp
|
|
if (!hp) return
|
|
const newValue = actionId === 'add' ? hp.value + 1 : hp.value - 1
|
|
if (newValue < 0 || newValue > hp.max) return
|
|
await actor.update({ 'system.hp.value': newValue })
|
|
}
|
|
|
|
async #handleFlow(actor, actionId) {
|
|
if (actionId === 'display') return
|
|
const fp = actor.system.flowPoints
|
|
if (fp === undefined) return
|
|
const newValue = actionId === 'add' ? fp.value + 1 : Math.max(0, fp.value - 1)
|
|
await actor.update({ 'system.flowPoints.value': newValue })
|
|
}
|
|
|
|
async #handleWeapon(actor, actionId) {
|
|
const weapon = actor.items.get(actionId)
|
|
if (!weapon) return
|
|
await actor.rollWeapon(weapon)
|
|
}
|
|
|
|
async #handleUtility(actor, token, actionId) {
|
|
switch (actionId) {
|
|
case 'longRest':
|
|
await actor.longRest()
|
|
break
|
|
case 'endTurn':
|
|
if (game.combat?.current?.tokenId === token?.id) {
|
|
await game.combat.nextTurn()
|
|
}
|
|
break
|
|
}
|
|
}
|
|
}
|
|
})
|