foundry-dsa41-game/src/module/sheets/character-standalone/advsf.mjs

118 lines
4.2 KiB
JavaScript

const {HandlebarsApplicationMixin, DocumentSheetV2} = foundry.applications.api
const {ActorSheetV2} = foundry.applications.sheets
export class StandaloneADVSF extends HandlebarsApplicationMixin(ActorSheetV2) {
/** @inheritDoc */
static DEFAULT_OPTIONS = {
position: {width: 520, height: 480},
classes: ['dsa41', 'sheet', 'actor', 'character', 'standalone', 'advsf'],
tag: 'form',
actions: {
rollFlaw: StandaloneADVSF.#rollFlaw,
openEmbeddedDocument: StandaloneADVSF.#openEmbeddedDocument,
}
}
/** @inheritDoc */
static PARTS = {
form: {
template: `systems/DSA_4-1/templates/actor/character/standalone/advsf.hbs`
}
}
_actor = null
constructor(actor) {
super(actor)
this._actor = actor
this.render(true)
this.options.window.title = `${this.document.name} Vor und Nachteile`
}
static async #rollFlaw(event, target) {
this._actor?.sheet.options.actions.rollFlaw.bind(this)(event, target)
}
static async #openEmbeddedDocument(event, target) {
this._actor?.sheet.options.actions.openEmbeddedDocument.bind(this)(event, target)
}
_configureRenderOptions(options) {
super._configureRenderOptions(options)
options.window.title = `${this.document.name}: Vor und Nachteile`
return options
}
async _prepareContext(context, options, object) {
if (this._actor) {
const actorData = this.document
context.system = actorData.system
context.flags = actorData.flags
context.derived = actorData.system
context.originalName = actorData.name
context.name = context.derived.name ?? actorData.name
context.effects = actorData.effects ?? []
context.advantages = []
context.flaws = []
actorData.itemTypes.Advantage.forEach((item) => {
if (!item.system.schlechteEigenschaft) {
context.advantages.push({
id: item._id,
name: item.name,
value: item.system.value,
options: item.system.auswahl,
description: item.system.description,
isAdvantage: !item.system.nachteil,
isDisadvantage: item.system.nachteil,
isBadAttribute: item.system.schlechteEigenschaft,
fav: item.getFlag("DSA_4-1", "favourite")
})
} else {
context.flaws.push({
id: item._id,
name: item.name,
value: item.system.value,
options: item.system.auswahl,
description: item.system.description,
isAdvantage: !item.system.nachteil,
isDisadvantage: item.system.nachteil,
isBadAttribute: item.system.schlechteEigenschaft,
fav: item.getFlag("DSA_4-1", "favourite")
})
}
}
)
context.specialAbilities = []
actorData.itemTypes.SpecialAbility.forEach((item) => {
context.specialAbilities.push({
id: item._id,
name: item.system.value ? item.system.value : item.name,
fav: item.getFlag("DSA_4-1", "favourite")
});
}
);
return context
}
}
_onRender(context, options) {
if (this._actor) {
new foundry.applications.ux.DragDrop.implementation({
dropSelector: ".advantages, .special-abilities",
permissions: {
drop: this._actor.sheet._canDragDrop.bind(this._actor.sheet)
},
callbacks: {
drop: this._actor.sheet._onDrop.bind(this._actor.sheet),
}
}).bind(this.element);
}
}
}