69 lines
2.2 KiB
JavaScript
69 lines
2.2 KiB
JavaScript
/**
|
|
* Manage Active Effect instances through an Actor or Item Sheet via effect control buttons.
|
|
* @param {MouseEvent} event The left-click event on the effect control
|
|
* @param {Actor|Item} owner The owning document which manages this effect
|
|
*/
|
|
export function onManageActiveEffect(event, owner) {
|
|
event.preventDefault();
|
|
const a = event.currentTarget;
|
|
const li = a.closest('li');
|
|
const effect = li.dataset.effectId
|
|
? owner.effects.get(li.dataset.effectId)
|
|
: null;
|
|
switch (a.dataset.action) {
|
|
case 'create':
|
|
return owner.createEmbeddedDocuments('ActiveEffect', [
|
|
{
|
|
name: game.i18n.format('DOCUMENT.New', {
|
|
type: game.i18n.localize('DOCUMENT.ActiveEffect'),
|
|
}),
|
|
icon: 'icons/svg/aura.svg',
|
|
origin: owner.uuid,
|
|
'duration.rounds':
|
|
li.dataset.effectType === 'temporary' ? 1 : undefined,
|
|
disabled: li.dataset.effectType === 'inactive',
|
|
},
|
|
]);
|
|
case 'edit':
|
|
return effect.sheet.render(true);
|
|
case 'delete':
|
|
return effect.delete();
|
|
case 'toggle':
|
|
return effect.update({ disabled: !effect.disabled });
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Prepare the data structure for Active Effects which are currently embedded in an Actor or Item.
|
|
* @param {ActiveEffect[]} effects A collection or generator of Active Effect documents to prepare sheet data for
|
|
* @return {object} Data for rendering
|
|
*/
|
|
export function prepareActiveEffectCategories(effects) {
|
|
// Define effect header categories
|
|
const categories = {
|
|
temporary: {
|
|
type: 'temporary',
|
|
label: game.i18n.localize('SHADOWRUN_6.Effect.Temporary'),
|
|
effects: [],
|
|
},
|
|
passive: {
|
|
type: 'passive',
|
|
label: game.i18n.localize('SHADOWRUN_6.Effect.Passive'),
|
|
effects: [],
|
|
},
|
|
inactive: {
|
|
type: 'inactive',
|
|
label: game.i18n.localize('SHADOWRUN_6.Effect.Inactive'),
|
|
effects: [],
|
|
},
|
|
};
|
|
|
|
// Iterate over active effects, classifying them into categories
|
|
for (let e of effects) {
|
|
if (e.disabled) categories.inactive.effects.push(e);
|
|
else if (e.isTemporary) categories.temporary.effects.push(e);
|
|
else categories.passive.effects.push(e);
|
|
}
|
|
return categories;
|
|
}
|