feature: generate pdf from actor
This commit is contained in:
311
src/main.ts
311
src/main.ts
@@ -9,6 +9,8 @@ import { ItemData } from '@league-of-foundry-developers/foundry-vtt-types/src/fo
|
||||
import { LabelledValues } from './elements/labelled-values';
|
||||
import { Text } from './elements/text';
|
||||
import { Texts } from './elements/texts';
|
||||
import { Column } from './elements/column';
|
||||
import { Separator } from './elements/separator';
|
||||
|
||||
Hooks.on(
|
||||
'renderActorSheetWfrp4eCharacter',
|
||||
@@ -37,18 +39,10 @@ Hooks.on(
|
||||
|
||||
const labelledRowHeight =
|
||||
Util.getHeightFromPx(docBuilder.doc, TEXT_SIZE + LABEL_SIZE) + 1;
|
||||
const textRowHeight = Util.getHeightFromPx(docBuilder.doc, TEXT_SIZE);
|
||||
const row2Y = labelledRowHeight + MARGINS.top + 2;
|
||||
const row3Y = row2Y + labelledRowHeight + 2;
|
||||
const row4Y = row3Y + labelledRowHeight + 2;
|
||||
const row5Y = row4Y + labelledRowHeight + 2;
|
||||
const row6Y = row5Y + labelledRowHeight + 2;
|
||||
const row7Y = row6Y + labelledRowHeight + 2;
|
||||
const row8Y = row7Y + textRowHeight + 2;
|
||||
|
||||
const skills = new LabelledValues(
|
||||
0,
|
||||
row8Y,
|
||||
0,
|
||||
actor.itemCategories.skill
|
||||
.map((item) => {
|
||||
return {
|
||||
@@ -59,12 +53,9 @@ Hooks.on(
|
||||
.sort((a, b) => a.label.localeCompare(b.label))
|
||||
);
|
||||
|
||||
const row9Y = row8Y + skills.getHeight(docBuilder.doc) + 2;
|
||||
const row10Y = row9Y + textRowHeight + 2;
|
||||
|
||||
const talents = new LabelledValues(
|
||||
0,
|
||||
row10Y,
|
||||
0,
|
||||
actor.itemCategories.talent
|
||||
.map((item) => {
|
||||
return {
|
||||
@@ -79,12 +70,9 @@ Hooks.on(
|
||||
1
|
||||
);
|
||||
|
||||
const row11Y = row10Y + talents.getHeight(docBuilder.doc) + 2;
|
||||
const row12Y = row11Y + textRowHeight + 2;
|
||||
|
||||
const traits = new Texts(
|
||||
0,
|
||||
row12Y,
|
||||
0,
|
||||
actor.itemCategories.trait
|
||||
.map((item) => {
|
||||
return item.name;
|
||||
@@ -93,114 +81,201 @@ Hooks.on(
|
||||
4
|
||||
);
|
||||
|
||||
const weaponsMelee = new Texts(
|
||||
0,
|
||||
0,
|
||||
actor.itemCategories.weapon
|
||||
.filter((w) => w.isMelee)
|
||||
.map((item) => {
|
||||
return `${item.name} : ${item.data.data.damage.meleeValue} (${
|
||||
item.mountDamage
|
||||
}), ${item.OriginalQualities.concat(item.OriginalFlaws).join(
|
||||
', '
|
||||
)}`;
|
||||
})
|
||||
.sort((a, b) => a.localeCompare(b)),
|
||||
1
|
||||
);
|
||||
|
||||
const weaponsRanged = new Texts(
|
||||
0,
|
||||
0,
|
||||
actor.itemCategories.weapon
|
||||
.filter((w) => w.isRanged)
|
||||
.map((item) => {
|
||||
return `${item.name} : ${item.data.data.damage.rangedValue}, ${
|
||||
item.data.data.range.value
|
||||
}, ${item.OriginalQualities.concat(item.OriginalFlaws).join(', ')}`;
|
||||
})
|
||||
.sort((a, b) => a.localeCompare(b)),
|
||||
1
|
||||
);
|
||||
|
||||
const ammunitions = new Texts(
|
||||
0,
|
||||
0,
|
||||
actor.itemCategories.ammunition
|
||||
.map((item) => {
|
||||
return `${item.data.data.quantity.value} ${item.name} : ${
|
||||
item.data.data.damage.value.length > 0
|
||||
? item.data.data.damage.value
|
||||
: '+0'
|
||||
}, (${item.data.data.range.value}), ${item.OriginalQualities.concat(
|
||||
item.OriginalFlaws
|
||||
).join(', ')}`;
|
||||
})
|
||||
.sort((a, b) => a.localeCompare(b)),
|
||||
2
|
||||
);
|
||||
|
||||
const imageWidth = 25;
|
||||
const imageY = labelledRowHeight + MARGINS.top + 2;
|
||||
const actorImageElement =
|
||||
actorImageData != null
|
||||
? new Image(0, row2Y, imageWidth, imageWidth, actorImageData)
|
||||
: new Box(0, row2Y, imageWidth, imageWidth);
|
||||
? new Image(0, imageY, imageWidth, imageWidth, actorImageData)
|
||||
: new Box(0, imageY, imageWidth, imageWidth);
|
||||
|
||||
docBuilder.build([
|
||||
new Row(0, 0, [
|
||||
new LabelledText(0, 0, 'Name', `${actor.name}`),
|
||||
new LabelledText(0, 0, 'Species', `${actorDetails?.species?.value}`),
|
||||
new LabelledText(0, 0, 'Gender', `${actorDetails?.gender?.value}`),
|
||||
]),
|
||||
actorImageElement,
|
||||
new Row(imageWidth + MARGINS.left + 1, row2Y, [
|
||||
new LabelledText(0, 0, 'Class', `${careerDetail?.class?.value}`),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'Career Group',
|
||||
`${careerDetail?.careergroup?.value}`
|
||||
),
|
||||
new LabelledText(0, 0, 'Career', `${currentCareer?.name}`),
|
||||
new Column(0, 0, [
|
||||
new Row(0, 0, [
|
||||
new LabelledText(0, 0, 'Name', `${actor.name}`),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'Species',
|
||||
`${actorDetails?.species?.value}`
|
||||
),
|
||||
new LabelledText(0, 0, 'Gender', `${actorDetails?.gender?.value}`),
|
||||
]),
|
||||
new Row(imageWidth + MARGINS.left + 1, 0, [
|
||||
new LabelledText(0, 0, 'Class', `${careerDetail?.class?.value}`),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'Career Group',
|
||||
`${careerDetail?.careergroup?.value}`
|
||||
),
|
||||
new LabelledText(0, 0, 'Career', `${currentCareer?.name}`),
|
||||
]),
|
||||
new Row(imageWidth + MARGINS.left + 1, 0, [
|
||||
new LabelledText(0, 0, 'Status', `${actorDetails?.status?.value}`),
|
||||
new LabelledText(0, 0, 'Age', `${actorDetails?.age?.value}`),
|
||||
new LabelledText(0, 0, 'Height', `${actorDetails?.height?.value}`),
|
||||
new LabelledText(0, 0, 'Weight', `${actorDetails?.weight?.value}`),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'Hair Colour',
|
||||
`${actorDetails?.haircolour?.value}`
|
||||
),
|
||||
]),
|
||||
new Row(imageWidth + MARGINS.left + 1, 0, [
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'Eye Colour',
|
||||
`${actorDetails?.eyecolour?.value}`
|
||||
),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'Distinguishing Mark',
|
||||
`${actorDetails?.distinguishingmark?.value}`
|
||||
),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'Star Sign',
|
||||
`${actorDetails?.starsign?.value}`
|
||||
),
|
||||
]),
|
||||
new Row(0, 0, [
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'CHARAbbrev.WS',
|
||||
`${actorCharacs?.ws?.value}`
|
||||
),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'CHARAbbrev.BS',
|
||||
`${actorCharacs?.bs?.value}`
|
||||
),
|
||||
new LabelledText(0, 0, 'CHARAbbrev.S', `${actorCharacs?.s?.value}`),
|
||||
new LabelledText(0, 0, 'CHARAbbrev.T', `${actorCharacs?.t?.value}`),
|
||||
new LabelledText(0, 0, 'CHARAbbrev.I', `${actorCharacs?.i?.value}`),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'CHARAbbrev.Ag',
|
||||
`${actorCharacs?.ag?.value}`
|
||||
),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'CHARAbbrev.Dex',
|
||||
`${actorCharacs?.dex?.value}`
|
||||
),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'CHARAbbrev.Int',
|
||||
`${actorCharacs?.int?.value}`
|
||||
),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'CHARAbbrev.WP',
|
||||
`${actorCharacs?.wp?.value}`
|
||||
),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'CHARAbbrev.Fel',
|
||||
`${actorCharacs?.fel?.value}`
|
||||
),
|
||||
]),
|
||||
new Row(0, 0, [
|
||||
new LabelledText(0, 0, 'Move', `${actorDetails?.move?.value}`),
|
||||
new LabelledText(0, 0, 'Walk', `${actorDetails?.move?.walk}`),
|
||||
new LabelledText(0, 0, 'Run', `${actorDetails?.move?.run}`),
|
||||
new LabelledText(0, 0, 'Fortune', `${actorStatus?.fortune?.value}`),
|
||||
new LabelledText(0, 0, 'Fate', `${actorStatus?.fate?.value}`),
|
||||
new LabelledText(0, 0, 'Resolve', `${actorStatus?.resolve?.value}`),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'Resilience',
|
||||
`${actorStatus?.resilience?.value}`
|
||||
),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'Wounds',
|
||||
`${actorStatus?.wounds?.value}/${actorStatus?.wounds?.max}`
|
||||
),
|
||||
]),
|
||||
new Separator(0, 0),
|
||||
new Text(0, 0, 'Skills'),
|
||||
skills,
|
||||
new Separator(0, 0),
|
||||
new Text(0, 0, 'Talents'),
|
||||
talents,
|
||||
new Separator(0, 0),
|
||||
new Text(0, 0, 'Traits'),
|
||||
traits,
|
||||
new Separator(0, 0),
|
||||
new Text(0, 0, 'SHEET.MeleeWeaponHeader'),
|
||||
weaponsMelee,
|
||||
new Separator(0, 0),
|
||||
new Text(0, 0, 'SHEET.RangedWeaponHeader'),
|
||||
weaponsRanged,
|
||||
new Separator(0, 0),
|
||||
new Text(0, 0, 'Ammunition'),
|
||||
ammunitions,
|
||||
]),
|
||||
new Row(imageWidth + MARGINS.left + 1, row3Y, [
|
||||
new LabelledText(0, 0, 'Status', `${actorDetails?.status?.value}`),
|
||||
new LabelledText(0, 0, 'Age', `${actorDetails?.age?.value}`),
|
||||
new LabelledText(0, 0, 'Height', `${actorDetails?.height?.value}`),
|
||||
new LabelledText(0, 0, 'Weight', `${actorDetails?.weight?.value}`),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'Hair Colour',
|
||||
`${actorDetails?.haircolour?.value}`
|
||||
),
|
||||
]),
|
||||
new Row(imageWidth + MARGINS.left + 1, row4Y, [
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'Eye Colour',
|
||||
`${actorDetails?.eyecolour?.value}`
|
||||
),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'Distinguishing Mark',
|
||||
`${actorDetails?.distinguishingmark?.value}`
|
||||
),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'Star Sign',
|
||||
`${actorDetails?.starsign?.value}`
|
||||
),
|
||||
]),
|
||||
new Row(0, row5Y, [
|
||||
new LabelledText(0, 0, 'CHARAbbrev.WS', `${actorCharacs?.ws?.value}`),
|
||||
new LabelledText(0, 0, 'CHARAbbrev.BS', `${actorCharacs?.bs?.value}`),
|
||||
new LabelledText(0, 0, 'CHARAbbrev.S', `${actorCharacs?.s?.value}`),
|
||||
new LabelledText(0, 0, 'CHARAbbrev.T', `${actorCharacs?.t?.value}`),
|
||||
new LabelledText(0, 0, 'CHARAbbrev.I', `${actorCharacs?.i?.value}`),
|
||||
new LabelledText(0, 0, 'CHARAbbrev.Ag', `${actorCharacs?.ag?.value}`),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'CHARAbbrev.Dex',
|
||||
`${actorCharacs?.dex?.value}`
|
||||
),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'CHARAbbrev.Int',
|
||||
`${actorCharacs?.int?.value}`
|
||||
),
|
||||
new LabelledText(0, 0, 'CHARAbbrev.WP', `${actorCharacs?.wp?.value}`),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'CHARAbbrev.Fel',
|
||||
`${actorCharacs?.fel?.value}`
|
||||
),
|
||||
]),
|
||||
new Row(0, row6Y, [
|
||||
new LabelledText(0, 0, 'Move', `${actorDetails?.move?.value}`),
|
||||
new LabelledText(0, 0, 'Walk', `${actorDetails?.move?.walk}`),
|
||||
new LabelledText(0, 0, 'Run', `${actorDetails?.move?.run}`),
|
||||
new LabelledText(0, 0, 'Fortune', `${actorStatus?.fortune?.value}`),
|
||||
new LabelledText(0, 0, 'Fate', `${actorStatus?.fate?.value}`),
|
||||
new LabelledText(0, 0, 'Resolve', `${actorStatus?.resolve?.value}`),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'Resilience',
|
||||
`${actorStatus?.resilience?.value}`
|
||||
),
|
||||
new LabelledText(
|
||||
0,
|
||||
0,
|
||||
'Wounds',
|
||||
`${actorStatus?.wounds?.value}/${actorStatus?.wounds?.max}`
|
||||
),
|
||||
]),
|
||||
new Text(0, row7Y, 'Skills'),
|
||||
skills,
|
||||
new Text(0, row9Y, 'Talents'),
|
||||
talents,
|
||||
new Text(0, row11Y, 'Traits'),
|
||||
traits,
|
||||
]);
|
||||
docBuilder.doc.save(`${app.actor.name}.pdf`);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user