mirror of
https://github.com/Foundryborne/daggerheart.git
synced 2026-04-22 07:23:37 +02:00
47 lines
1.7 KiB
JavaScript
47 lines
1.7 KiB
JavaScript
const fields = foundry.data.fields;
|
|
|
|
export default class DHSummonField extends fields.SchemaField {
|
|
/**
|
|
* Action Workflow order
|
|
*/
|
|
static order = 130;
|
|
|
|
constructor(options = {}, context = {}) {
|
|
const transformFields = {
|
|
actorUUID: new fields.DocumentUUIDField({
|
|
type: 'Actor',
|
|
required: true
|
|
})
|
|
};
|
|
super(transformFields, options, context);
|
|
}
|
|
|
|
static async execute() {
|
|
if (!canvas.scene)
|
|
return ui.notifications.warn(game.i18n.localize('DAGGERHEART.ACTIONS.TYPES.transform.canvasError'));
|
|
|
|
if (!this.actor.token)
|
|
return ui.notifications.warn(game.i18n.localize('DAGGERHEART.ACTIONS.TYPES.transform.prototypeError'));
|
|
|
|
const actor = await DHSummonField.getWorldActor(await foundry.utils.fromUuid(this.transform.actorUUID));
|
|
|
|
await this.actor.token.update(
|
|
{ ...actor.prototypeToken.toJSON(), actorId: actor.id },
|
|
{ diff: false, recursive: false, noHook: true }
|
|
);
|
|
this.actor.sheet.close();
|
|
actor.sheet.render({ force: true });
|
|
}
|
|
|
|
/* Check for any available instances of the actor present in the world, or create a world actor based on compendium */
|
|
static async getWorldActor(baseActor) {
|
|
const dataType = game.system.api.data.actors[`Dh${baseActor.type.capitalize()}`];
|
|
if (baseActor.inCompendium && dataType && baseActor.img === dataType.DEFAULT_ICON) {
|
|
const worldActorCopy = game.actors.find(x => x.name === baseActor.name);
|
|
if (worldActorCopy) return worldActorCopy;
|
|
}
|
|
|
|
const worldActor = await game.system.api.documents.DhpActor.create(baseActor.toObject());
|
|
return worldActor;
|
|
}
|
|
}
|