add power menu, part 1

This commit is contained in:
Mike Bloy 2024-06-11 00:05:04 -05:00
parent 5111bd830c
commit 18cd705626
3 changed files with 51 additions and 1 deletions

4
macros/powerMenu.js Normal file
View File

@ -0,0 +1,4 @@
game.modules.get('swade-mb-helpers').api.powerEffectsMenu({
token,
targets: game.user.targets,
});

View File

@ -1,6 +1,6 @@
import { log, moduleHelpers } from './globals.js'; import { log, moduleHelpers } from './globals.js';
import { requestFearRollFromTokens, requestRollFromTokens } from './helpers.js'; import { requestFearRollFromTokens, requestRollFromTokens } from './helpers.js';
import { powers } from './powers/powers.js'; import { powers, powerEffectsMenu } from './powers/powers.js';
import { setSummonCosts } from './powers/summonSupport.js'; import { setSummonCosts } from './powers/summonSupport.js';
export class api { export class api {
@ -14,6 +14,7 @@ export class api {
game.modules.get(moduleName).api = { game.modules.get(moduleName).api = {
fearTable: moduleHelpers.fearTableHelper, fearTable: moduleHelpers.fearTableHelper,
powerEffects: powers, powerEffects: powers,
powerEffectsMenu,
requestFearRollFromTokens, requestFearRollFromTokens,
requestRollFromTokens, requestRollFromTokens,
rulesVersion: moduleHelpers.rulesVersion, rulesVersion: moduleHelpers.rulesVersion,

View File

@ -295,3 +295,48 @@ export async function powers(options = {}) {
} }
ui.notifications.error(`No power effect found for ${swid}`); ui.notifications.error(`No power effect found for ${swid}`);
} }
export async function powerEffectsMenu(options = {}) {
const powers = {};
for (const powerClass of new Set(Object.values(PowerClasses))) {
const powerInst = new powerClass();
powers[powerInst.name] = powerClass;
}
let form = `<form>
<p>Select a power.</p>
<div class="form-group">
<label>Power:</label>
<select name="power">`;
let letter = '';
let first = true;
for (const powerName of Object.keys(powers).sort()) {
const newLetter = powerName[0].toUpperCase();
if (newLetter !== letter) {
letter = newLetter;
if (!first) {
form += '</optgroup>';
}
first = false;
form += `<optgroup label="${newLetter}">`;
}
form += `<option>${powerName}</option>`;
}
form += `</optgroup></div></form>`;
const formResult = await Dialog.wait({
title: 'Select a power',
content: form,
buttons: {
submit: {
label: 'Submit',
callback: (html) => {
const formElement = html[0].querySelector('form');
const formData = new FormDataExtended(formElement);
const formDataObject = formData.toObject();
return formDataObject;
},
},
cancel: { label: 'Cancel' },
},
});
console.log(formResult);
}