Allow editing embedded documents (used for spells here) in the item's sheet itself.

This commit is contained in:
Oliver-Akins 2024-01-11 19:03:24 -07:00
parent 516f7ac826
commit 7381a2a7fe
6 changed files with 56 additions and 7 deletions

View file

@ -67,6 +67,10 @@
"supplies": "Supplies", "supplies": "Supplies",
"resources": "Resources" "resources": "Resources"
} }
},
"openEmbeddedOnCreate": {
"name": "Edit Custom Items Immediately When Created",
"description": "Tells the character sheets that have \"Add\" buttons to open the Item's sheet when you create the new item so that you can immediately edit it without needing to click more buttons."
} }
}, },
"sheet-names": { "sheet-names": {
@ -220,7 +224,8 @@
"notification": { "notification": {
"error": { "error": {
"invalid-integer": "You must enter a valid whole number", "invalid-integer": "You must enter a valid whole number",
"item-not-found": "Failed to find an item to delete." "item-not-found": "Failed to find an item to delete",
"spell-create-failed": "Failed to create a custom spell"
} }
}, },
"dialogs": { "dialogs": {
@ -262,6 +267,11 @@
"explosives": "Explosives", "explosives": "Explosives",
"piloting": "Piloting" "piloting": "Piloting"
} }
},
"defaults": {
"spell": {
"name": "(Unnamed Spell)"
}
} }
}, },

View file

@ -14,17 +14,28 @@ export class ActorHandler extends Actor {
return this.actorTypes[this.type]; return this.actorTypes[this.type];
}; };
genericEmbeddedUpdate($event) { async openEmbeddedSheet($event) {
console.log(`openEmbeddedSheet`)
if (this.fn?.openEmbeddedSheet) {
this.fn.openEmbeddedSheet.bind(this)($event);
} else {
const data = $event.currentTarget.dataset;
let item = await fromUuid(data.embeddedEdit);
item?.sheet.render(true);
};
};
async genericEmbeddedUpdate($event) {
if (!this.fn?.genericEmbeddedUpdate) return; if (!this.fn?.genericEmbeddedUpdate) return;
this.fn.genericEmbeddedUpdate.bind(this)($event); this.fn.genericEmbeddedUpdate.bind(this)($event);
}; };
genericEmbeddedDelete($event) { async genericEmbeddedDelete($event) {
if (!this.fn?.genericEmbeddedDelete) return; if (!this.fn?.genericEmbeddedDelete) return;
this.fn.genericEmbeddedDelete.bind(this)($event); this.fn.genericEmbeddedDelete.bind(this)($event);
}; };
createCustomSpell() { async createCustomSpell() {
if (!this.fn?.createCustomSpell) return; if (!this.fn?.createCustomSpell) return;
this.fn.createCustomSpell.bind(this)(); this.fn.createCustomSpell.bind(this)();
this.sheet.render(true); this.sheet.render(true);

View file

@ -37,11 +37,26 @@ export class PlayerActor {
}; };
/** @this {Actor} */ /** @this {Actor} */
static createCustomSpell() { static async createCustomSpell() {
this.createEmbeddedDocuments( let items = await this.createEmbeddedDocuments(
"Item", "Item",
[{ type: `spell`, name: `New Spell` }] [{
type: `spell`,
name: game.i18n.format(`dotdungeon.defaults.spell.name`),
}]
); );
if (items.length == 0) {
ui.notifications.error(
`dotdungeon.notifications.error.spell-create-failed`,
{ localize: true, console: false }
);
return;
};
this.sheet.render(); this.sheet.render();
if (game.settings.get(`dotdungeon`, `openEmbeddedOnCreate`)) {
for (const item of items) {
item.sheet.render(true);
};
};
}; };
}; };

View file

@ -8,4 +8,14 @@ export default function() {
default: true, default: true,
requiresReload: false, requiresReload: false,
}); });
game.settings.register(`dotdungeon`, `openEmbeddedOnCreate`, {
name: `dotdungeon.settings.openEmbeddedOnCreate.name`,
hint: `dotdungeon.settings.openEmbeddedOnCreate.description`,
scope: `client`,
type: Boolean,
config: true,
default: true,
requiresReload: false,
});
}; };

View file

@ -24,6 +24,8 @@ export class PlayerSheet extends GenericActorSheet {
.on(`change`, this.actor.genericEmbeddedUpdate.bind(this.actor)); .on(`change`, this.actor.genericEmbeddedUpdate.bind(this.actor));
html.find(`[data-embedded-delete]`) html.find(`[data-embedded-delete]`)
.on(`click`, this.actor.genericEmbeddedDelete.bind(this.actor)); .on(`click`, this.actor.genericEmbeddedDelete.bind(this.actor));
html.find(`[data-embedded-edit]`)
.on(`click`, this.actor.openEmbeddedSheet.bind(this.actor));
}; };
async getData() { async getData() {

View file

@ -33,6 +33,7 @@
<div class="spell__actions"> <div class="spell__actions">
<button <button
class="confirm" class="confirm"
data-embedded-edit="{{spell.uuid}}"
> >
Edit Edit
</button> </button>