mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-04-21 23:13:39 +02:00
38 lines
No EOL
1.5 KiB
JavaScript
38 lines
No EOL
1.5 KiB
JavaScript
export default class DhApplyActiveEffect extends CONFIG.RegionBehavior.dataModels.applyActiveEffect {
|
|
static async #getApplicableEffects(token) {
|
|
const effects = await Promise.all(this.effects.map(fromUuid));
|
|
return (effects).filter(effect => !effect.system.targetDispositions.size || effect.system.targetDispositions.has(token.disposition));
|
|
}
|
|
|
|
static async #onTokenEnter(event) {
|
|
if ( !event.user.isSelf ) return;
|
|
const {token, movement} = event.data;
|
|
const actor = token.actor;
|
|
if ( !actor ) return;
|
|
const resumeMovement = movement ? token.pauseMovement() : undefined;
|
|
const effects = await DhApplyActiveEffect.#getApplicableEffects.bind(this)(event.data.token);
|
|
const toCreate = [];
|
|
for ( const effect of effects ) {
|
|
const data = effect.toObject();
|
|
delete data._id;
|
|
if ( effect.compendium ) {
|
|
data._stats.duplicateSource = null;
|
|
data._stats.compendiumSource = effect.uuid;
|
|
} else {
|
|
data._stats.duplicateSource = effect.uuid;
|
|
data._stats.compendiumSource = null;
|
|
}
|
|
data._stats.exportSource = null;
|
|
data.origin = this.parent.uuid;
|
|
toCreate.push(data);
|
|
}
|
|
if ( toCreate.length ) await actor.createEmbeddedDocuments("ActiveEffect", toCreate);
|
|
await resumeMovement?.();
|
|
}
|
|
|
|
/** @override */
|
|
static events = {
|
|
...CONFIG.RegionBehavior.dataModels.applyActiveEffect.events,
|
|
[CONST.REGION_EVENTS.TOKEN_ENTER]: this.#onTokenEnter,
|
|
};
|
|
} |