Implement a button to create items of a specific subtype in the player inventory (closes #120)
This commit is contained in:
parent
b3e699bc32
commit
96f5b17785
9 changed files with 73 additions and 21 deletions
|
|
@ -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`);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue