import DaggerheartSheet from './daggerheart-sheet.mjs'; const { DocumentSheetV2 } = foundry.applications.api; export default class DhpEnvironment extends DaggerheartSheet(DocumentSheetV2) { constructor(options) { super(options); this.editMode = false; } static DEFAULT_OPTIONS = { tag: 'form', classes: ['daggerheart', 'sheet', 'adversary', 'environment'], position: { width: 600, height: 'auto' }, actions: { toggleSlider: this.toggleSlider, viewFeature: this.viewFeature, addFeature: this.addFeature, removeFeature: this.removeFeature, addTone: this.addTone, removeTone: this.removeTone, useFeature: this.useFeature }, form: { handler: this._updateForm, closeOnSubmit: false, submitOnChange: true } }; /** @override */ static PARTS = { form: { id: 'form', template: 'systems/daggerheart/templates/sheets/environment.hbs' } }; /* -------------------------------------------- */ /** @inheritDoc */ get title() { return `${game.i18n.localize('Environment')} - ${this.document.name}`; } async _prepareContext(_options) { return { title: `${this.document.name} - ${game.i18n.localize(SYSTEM.ACTOR.adversaryTypes[this.document.system.type].name)}`, user: this.document, source: this.document.toObject(), fields: this.document.schema.fields, data: { type: game.i18n.localize(SYSTEM.ACTOR.adversaryTypes[this.document.system.type].name), features: this.document.items.reduce((acc, x) => { if (x.type === 'feature') { const feature = x.toObject(); acc.push({ ...feature, system: { ...feature.system, actionType: game.i18n.localize(SYSTEM.ITEM.actionTypes[feature.system.actionType].name) }, uuid: x.uuid }); } return acc; }, []) }, editMode: this.editMode, config: SYSTEM }; } static async _updateForm(event, _, formData) { await this.document.update(formData.object); this.render(); } static toggleSlider() { this.editMode = !this.editMode; this.render(); } static async viewFeature(_, button) { const move = await fromUuid(button.dataset.feature); move.sheet.render(true); } static async addFeature() { const result = await this.document.createEmbeddedDocuments('Item', [ { name: game.i18n.localize('DAGGERHEART.Sheets.Environment.NewFeature'), type: 'feature' } ]); await result[0].sheet.render(true); } static async removeFeature(_, button) { await this.document.items.find(x => x.uuid === button.dataset.feature).delete(); } static async addTone() { await this.document.update({ 'system.toneAndFeel': [...this.document.system.toneAndFeel, ''] }); } static async removeTone(button) { await this.document.update({ 'system.toneAndFeel': this.document.system.toneAndFeel.filter( (_, index) => index !== Number.parseInt(button.dataset.tone) ) }); } static async useFeature(_, button) { const item = this.document.items.find(x => x.uuid === button.dataset.feature); const cls = getDocumentClass('ChatMessage'); const msg = new cls({ user: game.user.id, content: await renderTemplate('systems/daggerheart/templates/chat/ability-use.hbs', { title: game.i18n.format('DAGGERHEART.Chat.EnvironmentTitle', { actionType: button.dataset.actionType }), card: { name: item.name, img: item.img, description: item.system.description } }) }); cls.create(msg.toObject()); } }