Implement a button to create items of a specific subtype in the player inventory (closes #120)

This commit is contained in:
Oliver-Akins 2024-03-22 23:35:04 -06:00
parent b3e699bc32
commit 96f5b17785
9 changed files with 73 additions and 21 deletions

View file

@ -1,6 +1,7 @@
export class DotDungeonActor extends Actor {
async createEmbeddedItem(defaults, opts = {}) {
let items = await this.createEmbeddedDocuments(`Item`, defaults);
if (!Array.isArray(items)) items = items ? [items] : [];
if (items.length == 0) {
throw new Error(`Failed to create any items`);
};

View file

@ -3,7 +3,7 @@ import { createArray } from "./createArray.mjs";
import { detailsExpanded } from "./detailsExpanded.mjs";
import { objectValue } from "./objectValue.mjs";
import { toFriendlyDuration } from "./toFriendlyDuration.mjs";
import { localizer } from "../utils/localizer.mjs";
import { handlebarsLocalizer } from "../utils/localizer.mjs";
import { options } from "./options.mjs";
export default {
@ -14,7 +14,7 @@ export default {
"dd-toFriendlyDuration": toFriendlyDuration,
"dd-objectValue": objectValue,
"dd-expanded": detailsExpanded,
"dd-i18n": localizer,
"dd-i18n": handlebarsLocalizer,
"dd-options": options,
// Simple helpers

View file

@ -136,6 +136,7 @@ export class PlayerSheetv2 extends GenericActorSheet {
filters[type] = {
label: localizer(`TYPES.Item.${type}`),
active: !this._itemTypesHidden.has(type),
createLabel: localizer(`dotdungeon.sheet.actor.v2.create-item`, {type}),
};
};
return filters;

View file

@ -1,3 +1,4 @@
import { localizer } from "../utils/localizer.mjs";
import DOTDUNGEON from "../config.mjs";
export class GenericActorSheet extends ActorSheet {
@ -127,11 +128,11 @@ export class GenericActorSheet extends ActorSheet {
async genericEmbeddedCreate($event) {
const data = $event.currentTarget.dataset;
if (!this[`createCustom${data.embeddedCreate}`]) {
this.createEmbeddedItem({
this.actor.createEmbeddedItem({
type: data.embeddedCreate,
name: localizer(
`dotdungeon.default.name`,
{ document: `Actor`, type: data.embeddedCreate }
{ document: `Item`, type: data.embeddedCreate }
),
});
} else {

View file

@ -1,8 +1,14 @@
import { localizerConfig } from "../config.mjs";
export function localizer(key, args = {}, depth = 0) {
export function handlebarsLocalizer(key, ...args) {
let data = args[0]
if (args.length === 1) data = args[0].hash;
if (key instanceof Handlebars.SafeString) key = key.toString();
const localized = localizer(key, data);
return localized;
};
export function localizer(key, args = {}, depth = 0) {
/** @type {string} */
let localized = game.i18n.format(key, args);
const subkeys = localized.matchAll(localizerConfig.subKeyPattern);