126 lines
3.5 KiB
JavaScript
126 lines
3.5 KiB
JavaScript
import { L5R5E } from "./config.js";
|
|
|
|
/**
|
|
* Extends the actor to process special things from L5R.
|
|
*/
|
|
export class HelpersL5r5e {
|
|
/**
|
|
* Get Rings/Element for List / Select
|
|
*/
|
|
static getRingsList(actor = null) {
|
|
return CONFIG.l5r5e.stances.map((e) => ({
|
|
id: e,
|
|
label: game.i18n.localize(`l5r5e.rings.${e}`),
|
|
value: actor?.data?.data?.rings?.[e] || 0,
|
|
}));
|
|
}
|
|
|
|
/**
|
|
* Get Skills for List / Select with groups
|
|
*/
|
|
static getSkillsList(useGroup = false) {
|
|
if (!useGroup) {
|
|
return Array.from(L5R5E.skills).map(([id, cat]) => ({
|
|
id: id,
|
|
cat: cat,
|
|
label: game.i18n.localize(`l5r5e.skills.${cat}.${id}`),
|
|
}));
|
|
}
|
|
|
|
const skills = {};
|
|
Array.from(CONFIG.l5r5e.skills).forEach(([id, cat]) => {
|
|
if (!skills[cat]) {
|
|
skills[cat] = [];
|
|
}
|
|
skills[cat].push({
|
|
id: id,
|
|
cat: cat,
|
|
label: game.i18n.localize(`l5r5e.skills.${cat}.${id}`),
|
|
});
|
|
});
|
|
return skills;
|
|
}
|
|
|
|
/**
|
|
* Get Techniques for List / Select
|
|
*/
|
|
static getTechniquesList() {
|
|
return CONFIG.l5r5e.techniques.map((e) => ({
|
|
id: e,
|
|
label: game.i18n.localize(`l5r5e.techniques.${e}`),
|
|
}));
|
|
}
|
|
|
|
/**
|
|
* Return the target object on a drag n drop event, or null if not found
|
|
*/
|
|
static async getDragnDropTargetObject(event) {
|
|
const data = JSON.parse(event.dataTransfer.getData("text/plain"));
|
|
return await HelpersL5r5e.getObjectGameOrPack(data.id, data.type, data.pack);
|
|
}
|
|
|
|
/**
|
|
* Return the object from Game or Pack by his ID, or null if not found
|
|
*/
|
|
static async getObjectGameOrPack(id, type, pack = null) {
|
|
try {
|
|
// Named pack
|
|
if (pack) {
|
|
const data = await game.packs.get(pack).getEntry(id);
|
|
if (data) {
|
|
return HelpersL5r5e.createItemFromCompendium(data);
|
|
}
|
|
}
|
|
|
|
// Game object
|
|
let item = null;
|
|
switch (type) {
|
|
case "Actor":
|
|
item = game.actors.get(id);
|
|
break;
|
|
|
|
case "Item":
|
|
item = game.items.get(id);
|
|
break;
|
|
|
|
case "JournalEntry":
|
|
item = game.journal.get(id);
|
|
break;
|
|
|
|
case "Macro":
|
|
item = game.macros.get(id);
|
|
break;
|
|
}
|
|
if (item) {
|
|
return item;
|
|
}
|
|
|
|
// Unknown pack object, iterate all packs
|
|
for (const comp of game.packs) {
|
|
const data = await comp.getEntity(id);
|
|
if (data) {
|
|
return HelpersL5r5e.createItemFromCompendium(data);
|
|
}
|
|
}
|
|
} catch (err) {
|
|
console.warn(err);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
/**
|
|
* Make a temporary item for compendium drag n drop
|
|
*/
|
|
static async createItemFromCompendium(data) {
|
|
if (!["item", "armor", "weapon", "technique", "peculiarity", "property"].includes(data.type)) {
|
|
return data;
|
|
}
|
|
const item = await Item.create(data, { temporary: true });
|
|
|
|
// reinject compendium id
|
|
item.data._id = data._id;
|
|
|
|
return item;
|
|
}
|
|
}
|