RC-63 | Display skills in sheet

This commit is contained in:
Oliver-Akins 2025-01-30 21:49:16 -07:00
parent df35c00c5d
commit 1302d91469
9 changed files with 142 additions and 24 deletions

View file

@ -80,6 +80,7 @@ export class CombinedHeroSheet extends GenericAppMixin(HandlebarsApplicationMixi
ctx = await HeroSkillsCardV1.prepareGear(ctx);
ctx = await HeroSkillsCardV1.prepareAmmo(ctx);
ctx = await HeroSkillsCardV1.prepareSkills(ctx);
Logger.debug(`Context:`, ctx);
return ctx;

View file

@ -1,5 +1,5 @@
import { deleteItemFromElement, editItemFromElement } from "../utils.mjs";
import { filePath } from "../../consts.mjs";
import { documentSorter, filePath } from "../../consts.mjs";
import { gameTerms } from "../../gameTerms.mjs";
import { GenericAppMixin } from "../GenericApp.mjs";
import { localizer } from "../../utils/Localizer.mjs";
@ -52,7 +52,7 @@ export class HeroSkillsCardV1 extends GenericAppMixin(HandlebarsApplicationMixin
} = options;
new ContextMenu(
element,
`[data-ctx-menu="gear"]`,
`[data-ctx-menu="gear"],[data-ctx-menu="skill"]`,
[
{
name: localizer(`RipCrypt.common.edit`),
@ -81,6 +81,7 @@ export class HeroSkillsCardV1 extends GenericAppMixin(HandlebarsApplicationMixin
ctx = await HeroSkillsCardV1.prepareGear(ctx);
ctx = await HeroSkillsCardV1.prepareAmmo(ctx);
ctx = await HeroSkillsCardV1.prepareSkills(ctx);
Logger.debug(`Context:`, ctx);
return ctx;
@ -122,6 +123,48 @@ export class HeroSkillsCardV1 extends GenericAppMixin(HandlebarsApplicationMixin
ctx.ammo = 0;
return ctx;
};
static async prepareSkills(ctx) {
ctx.skills = {};
const abilities = Object.values(gameTerms.Abilities);
const heroRank = ctx.actor.system.level.rank;
const embeddedSkills = ctx.actor.itemTypes.skill.sort(documentSorter);
for (let ability of abilities) {
const skills = [];
for (const skill of embeddedSkills) {
if (skill.system.ability !== ability) { continue };
skills.push({
uuid: skill.uuid,
name: skill.name,
use: skill.system.advances[heroRank],
});
};
// Thin Glim is grouped with full glim.
if (ability === gameTerms.Abilities.THINGLIM) {
ability = gameTerms.Abilities.GLIM;
};
ctx.skills[ability] ??= [];
ctx.skills[ability].push(...skills);
};
const limit = ctx.actor.system.limit.skills;
for (const ability of abilities) {
if (ctx.skills[ability] == null) { continue };
const length = ctx.skills[ability].length;
if (length >= limit) {
ctx.skills[ability] = ctx.skills[ability].slice(0, limit);
} else {
ctx.skills[ability] = ctx.skills[ability]
.concat(Array(limit - length).fill(null))
.slice(0, limit);
};
}
return ctx;
};
// #endregion
// #region Actions