Files
wfrp4-actor-sheet-print/src/main.ts
2024-05-28 07:18:58 +02:00

1043 lines
30 KiB
TypeScript

import { PdfBuilder } from './pdf-builder';
import { LabelledText } from './elements/labelled-text';
import { Row } from './elements/row';
import { Image } from './elements/image';
import { Box } from './elements/box';
import { Util } from './util';
import { i18nLocalize, isGM, MARGINS } from './constants';
import { ItemData } from '@league-of-foundry-developers/foundry-vtt-types/src/foundry/common/data/data.mjs';
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';
import { Blank } from './elements/blank';
import { AbstractBuilder } from './abstract-builder';
import { HtmlBuilder } from './html-builder';
Hooks.on('getActorDirectoryEntryContext', async (_, options) => {
options.push(
{
name: i18nLocalize('WFRP4SHEETPRINT.export.pdf'),
condition: isGM(),
icon: '<i class="fas fa-file-pdf"></i>',
callback: async (target) => {
const actor: Actor & any = (<any>game).actors.get(
target.attr('data-document-id')
);
const docBuilder = new PdfBuilder({
orientation: 'p',
unit: 'mm',
});
await generate(actor, docBuilder);
},
},
{
name: i18nLocalize('WFRP4SHEETPRINT.export.html'),
condition: isGM(),
icon: '<i class="fas fa-file-code"></i>',
callback: async (target) => {
const actor: Actor & any = (<any>game).actors.get(
target.attr('data-document-id')
);
const docBuilder = new HtmlBuilder();
await generate(actor, docBuilder);
},
}
);
});
Hooks.on(
'renderActorSheetWfrp4eCharacter',
async (app: ActorSheet, html: JQuery) => {
const actor: Actor & any = app.actor;
addActorSheetActionButton(html, 'print', async () => {
const docBuilder = new PdfBuilder({
orientation: 'p',
unit: 'mm',
});
await generate(actor, docBuilder);
});
}
);
function addActorSheetActionButton(
html: JQuery,
icon: string,
onClick: () => void
) {
const button = document.createElement('a');
button.classList.add('print');
button.innerHTML = `<i class="fas fa-${icon}"> </i>`;
button.addEventListener('click', () => {
onClick();
});
const header = html.find('.window-header');
const title = header.find('.window-title');
title.after(button);
}
async function generate(actor: Actor & any, docBuilder: AbstractBuilder) {
const actorData = actor;
// @ts-ignore
const actorDetails = actorData.system.details;
const actorStatus = actorData.system.status;
const actorCharacs = actor.characteristics;
const actorImage = actor.img;
let actorImageData: string | null = null;
if (actorImage != null) {
const texture = await loadTexture(actorImage);
actorImageData = await ImageHelper.textureToImage(texture);
}
const currentCareer: Item & any = actor.currentCareer;
const careerData: ItemData & any = currentCareer;
const careerDetail: any = careerData?.system;
const skills = new LabelledValues(
docBuilder.getGenerateType(),
0,
0,
actor.itemTypes.skill
.map((item) => {
const key = item.characteristic.key
const i18nKey = key.length > 1 ? key.charAt(0).toUpperCase() + key.substring(1) : key.toUpperCase()
let i18nResult = i18nLocalize('CHARAbbrev.' + i18nKey)
if (i18nResult.includes('CHARAbbrev')) {
i18nResult = i18nLocalize('CHARAbbrev.' + i18nKey.toUpperCase())
}
return {
label: `${item.name} (${i18nResult})`,
value: item.system.total.value,
};
})
.sort((a, b) => a.label.localeCompare(b.label)),
undefined,
false,
{ name: 'skills' }
);
const talentsByName: { [name: string]: { count: number; test: string } } = {};
actor.itemTypes.talent.forEach((item) => {
const name = item.name;
if (talentsByName[name] == null) {
talentsByName[name] = { count: 1, test: item.system.tests.value };
} else {
talentsByName[name].count++;
}
});
const talents = new LabelledValues(
docBuilder.getGenerateType(),
0,
0,
Object.entries(talentsByName)
.map(([name, value]) => {
return {
label: value.test.length > 0 ? `${name} : ${value.test}` : name,
value: value.count,
};
})
.sort((a, b) => a.label.localeCompare(b.label)),
1,
true
);
const traits = new Texts(
docBuilder.getGenerateType(),
0,
0,
actor.itemTypes.trait
.map((item) => {
return item.name;
})
.sort((a, b) => a.localeCompare(b)),
4
);
const weaponsMelee = new Texts(
docBuilder.getGenerateType(),
0,
0,
Util.getActorItems(actor, 'weapon')
.filter((w) => w.isMelee)
.map((item) => {
return `${item.name} : ${item.WeaponGroup}, ${item.Reach}, ${
item.system.damage.value
} (${item.mountDamage}), ${item.OriginalQualities.concat(
item.OriginalFlaws
).join(', ')}`;
})
.sort((a, b) => a.localeCompare(b)),
1,
true
);
const weaponsRanged = new Texts(
docBuilder.getGenerateType(),
0,
0,
Util.getActorItems(actor, 'weapon')
.filter((w) => w.isRanged)
.map((item) => {
return `${item.name} : ${item.WeaponGroup}, ${
item.system.range.value
} (${item.Range}), ${item.system.damage.value} (${
item.Damage
}), ${item.OriginalQualities.concat(item.OriginalFlaws).join(', ')}`;
})
.sort((a, b) => a.localeCompare(b)),
1,
true
);
const ammunitions = new Texts(
docBuilder.getGenerateType(),
0,
0,
Util.getActorItems(actor, 'ammunition')
.map((item) => {
return `${item.system.quantity.value} ${item.name} : ${
item.system.range.value.length > 0
? item.system.range.value
: 'As Weapon'
}, ${
item.system.damage.value.length > 0 ? item.system.damage.value : '+0'
}, ${item.OriginalQualities.concat(item.OriginalFlaws).join(', ')}`;
})
.sort((a, b) => a.localeCompare(b)),
2,
true
);
const armourLocation: string[] = [];
const armourLabels: { [key: string]: string[] } = {};
for (const armour of Util.getActorItems(actor, 'armour')) {
const maxAp = armour.system.AP;
for (const key of Object.keys(maxAp)) {
if (maxAp[key] > 0) {
if (!armourLocation.includes(key)) {
armourLocation.push(key);
}
if (armourLabels[key] == null) {
armourLabels[key] = [];
}
armourLabels[key].push(
`${armour.name} ${maxAp[key]} ${armour.OriginalQualities.concat(
armour.OriginalFlaws
).join(' ')}`
);
}
}
}
const armours = new Texts(
docBuilder.getGenerateType(),
0,
0,
armourLocation.map((al) => {
return `${actorStatus?.armour[al]?.label} : ${armourLabels[al]?.join(
', '
)}`;
}),
1,
true
);
const petty = new Texts(
docBuilder.getGenerateType(),
0,
0,
actor.itemTypes.spell
.filter((s) => s.lore.value === 'petty')
.map((s) => {
return `${s.name} : ${s.cn.value}, ${s.Range}, ${s.Target}, ${s.Duration}`;
}),
2,
true
);
const spell = new Texts(
docBuilder.getGenerateType(),
0,
0,
actor.itemTypes.spell
.filter((s) => s.lore.value !== 'petty')
.map((s) => {
return `${s.name} : ${s.cn.value}, ${s.Range}, ${s.Target}, ${s.Duration}, ${s.ingredientList.length}`;
}),
2,
true
);
const blessing = new Texts(
docBuilder.getGenerateType(),
0,
0,
actor.itemTypes.prayer
.filter((s) => s.prayerType.value === 'blessing')
.map((s) => {
return `${s.name} : ${s.Range}, ${s.Target}, ${s.Duration}`;
}),
2,
true
);
const miracle = new Texts(
docBuilder.getGenerateType(),
0,
0,
actor.itemTypes.prayer
.filter((s) => s.prayerType.value !== 'blessing')
.map((s) => {
return `${s.name} : ${s.Range}, ${s.Target}, ${s.Duration}`;
}),
2,
true
);
const allMoney = Util.getActorItems(actor, 'money');
const moneyNames: string[] = [];
const moneyByName: { [name: string]: number } = {};
for (const money of allMoney) {
if (!moneyNames.includes(money.name)) {
moneyNames.push(money.name);
}
if (moneyByName[money.name] == null) {
moneyByName[money.name] = 0;
}
moneyByName[money.name] = moneyByName[money.name] + money.quantity.value;
}
const trappingsHeader = new Texts(
docBuilder.getGenerateType(),
0,
0,
[
`${i18nLocalize('Trappings')} : ${i18nLocalize('Money')} : ${moneyNames
.map((m) => {
return `${m} : ${moneyByName[m]}`;
})
.join(', ')}`,
],
1,
true
);
const trappings = new Texts(
docBuilder.getGenerateType(),
0,
0,
Util.getAllActorItems(actor, ['container', 'trapping'])
.map((t) => {
const location = t.location.value;
let prefix = '';
if (location != null && location !== 0 && location !== '') {
prefix = `${actor.getEmbeddedDocument('Item', location).name} : `;
}
const qteLabel = t.quantity.value > 1 ? `${t.quantity.value} ` : '';
return `${prefix}${qteLabel}${t.name}`;
})
.sort((a, b) => a.localeCompare(b)),
4,
true
);
const critical = new Texts(
docBuilder.getGenerateType(),
0,
0,
actor.itemTypes.critical.map((i) => {
return i.name;
}),
3
);
const disease = new Texts(
docBuilder.getGenerateType(),
0,
0,
actor.itemTypes.disease.map((i) => {
return i.name;
}),
3
);
const injury = new Texts(
docBuilder.getGenerateType(),
0,
0,
actor.itemTypes.injury.map((i) => {
return i.name;
}),
3
);
const mutationP = new Texts(
docBuilder.getGenerateType(),
0,
0,
actor.itemTypes.mutation
.filter((i) => i.mutationType.value === 'physical')
.map((i) => {
return i.name;
}),
3
);
const mutationM = new Texts(
docBuilder.getGenerateType(),
0,
0,
actor.itemTypes.mutation
.filter((i) => i.mutationType.value === 'mental')
.map((i) => {
return i.name;
}),
3
);
const psychology = new Texts(
docBuilder.getGenerateType(),
0,
0,
actor.itemTypes.psychology.map((i) => {
return i.name;
}),
3
);
const labelledRowHeight = docBuilder.getLabelledRowHeight();
const imageWidth = 25 * docBuilder.getImageScale();
const imageY = labelledRowHeight + MARGINS.top + 2;
const actorImageElementPdf =
actorImageData != null
? new Image(
docBuilder.getGenerateType(),
0,
imageY,
imageWidth,
imageWidth,
actorImageData,
{
isHtml: false,
}
)
: new Box(
docBuilder.getGenerateType(),
0,
imageY,
imageWidth,
imageWidth,
{
isHtml: false,
}
);
const actorImageElementHtml =
actorImageData != null
? new Image(
docBuilder.getGenerateType(),
0,
imageY,
imageWidth,
imageWidth,
actorImageData,
{
isPdf: false,
}
)
: new Box(
docBuilder.getGenerateType(),
0,
imageY,
imageWidth,
imageWidth,
{
isPdf: false,
}
);
docBuilder.build([
actorImageElementPdf,
new Column(
docBuilder.getGenerateType(),
0,
0,
[
new Row(docBuilder.getGenerateType(), 0, 0, [
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Name',
`${actor.name}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Species',
`${actorDetails?.species?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Gender',
`${actorDetails?.gender?.value}`
),
]),
new Row(
docBuilder.getGenerateType(),
imageWidth + MARGINS.left + 1,
0,
[
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Class',
`${careerDetail?.class?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Career Group',
`${careerDetail?.careergroup?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Career',
`${currentCareer?.name}`
),
],
undefined,
undefined,
undefined,
{ isHtml: false }
),
new Row(
docBuilder.getGenerateType(),
imageWidth + MARGINS.left + 1,
0,
[
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Status',
`${actorDetails?.status?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Age',
`${actorDetails?.age?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Height',
`${actorDetails?.height?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Weight',
`${actorDetails?.weight?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Hair Colour',
`${actorDetails?.haircolour?.value}`
),
],
undefined,
undefined,
undefined,
{ isHtml: false }
),
new Row(
docBuilder.getGenerateType(),
imageWidth + MARGINS.left + 1,
0,
[
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Eye Colour',
`${actorDetails?.eyecolour?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Distinguishing Mark',
`${actorDetails?.distinguishingmark?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Star Sign',
`${actorDetails?.starsign?.value}`
),
],
undefined,
undefined,
undefined,
{ isHtml: false }
),
new Row(
docBuilder.getGenerateType(),
0,
0,
[
actorImageElementHtml,
new Column(docBuilder.getGenerateType(), 0, 0, [
new Row(
docBuilder.getGenerateType(),
imageWidth + MARGINS.left + 1,
0,
[
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Class',
`${careerDetail?.class?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Career Group',
`${careerDetail?.careergroup?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Career',
`${currentCareer?.name}`
),
]
),
new Row(
docBuilder.getGenerateType(),
imageWidth + MARGINS.left + 1,
0,
[
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Status',
`${actorDetails?.status?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Age',
`${actorDetails?.age?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Height',
`${actorDetails?.height?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Weight',
`${actorDetails?.weight?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Hair Colour',
`${actorDetails?.haircolour?.value}`
),
]
),
new Row(
docBuilder.getGenerateType(),
imageWidth + MARGINS.left + 1,
0,
[
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Eye Colour',
`${actorDetails?.eyecolour?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Distinguishing Mark',
`${actorDetails?.distinguishingmark?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Star Sign',
`${actorDetails?.starsign?.value}`
),
]
),
]),
],
undefined,
undefined,
undefined,
{ isPdf: false }
),
Blank.heightBlank(docBuilder.getGenerateType(), 2),
new Row(docBuilder.getGenerateType(), 0, 0, [
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'CHARAbbrev.WS',
`${actorCharacs?.ws?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'CHARAbbrev.BS',
`${actorCharacs?.bs?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'CHARAbbrev.S',
`${actorCharacs?.s?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'CHARAbbrev.T',
`${actorCharacs?.t?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'CHARAbbrev.I',
`${actorCharacs?.i?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'CHARAbbrev.Ag',
`${actorCharacs?.ag?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'CHARAbbrev.Dex',
`${actorCharacs?.dex?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'CHARAbbrev.Int',
`${actorCharacs?.int?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'CHARAbbrev.WP',
`${actorCharacs?.wp?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'CHARAbbrev.Fel',
`${actorCharacs?.fel?.value}`
),
]),
new Row(docBuilder.getGenerateType(), 0, 0, [
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Move',
`${actorDetails?.move?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Walk',
`${actorDetails?.move?.walk}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Run',
`${actorDetails?.move?.run}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Fortune',
`${actorStatus?.fortune?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Fate',
`${actorStatus?.fate?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Resolve',
`${actorStatus?.resolve?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Resilience',
`${actorStatus?.resilience?.value}`
),
new LabelledText(
docBuilder.getGenerateType(),
0,
0,
'Wounds',
`${actorStatus?.wounds?.value}/${actorStatus?.wounds?.max}`
),
]),
new Separator(docBuilder.getGenerateType(), 0, 0),
new Text(docBuilder.getGenerateType(), 0, 0, 'Skills'),
skills,
new Separator(docBuilder.getGenerateType(), 0, 0),
new Text(
docBuilder.getGenerateType(),
0,
0,
`${i18nLocalize('Talents')} : ${i18nLocalize('Tests')}`
),
talents,
traits.contextElements.length > 0
? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
traits.contextElements.length > 0
? new Text(docBuilder.getGenerateType(), 0, 0, 'Traits')
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
traits,
weaponsMelee.contextElements.length > 0
? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
weaponsMelee.contextElements.length > 0
? new Text(
docBuilder.getGenerateType(),
0,
0,
`${i18nLocalize('SHEET.MeleeWeaponHeader')} : ${i18nLocalize(
'Weapon Group'
)}, ${i18nLocalize('Reach')}, ${i18nLocalize(
'Damage'
)}, ${i18nLocalize('Qualities')}, ${i18nLocalize('Flaws')}`
)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
weaponsMelee,
weaponsRanged.contextElements.length > 0
? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
weaponsRanged.contextElements.length > 0
? new Text(
docBuilder.getGenerateType(),
0,
0,
`${i18nLocalize('SHEET.RangedWeaponHeader')} : ${i18nLocalize(
'Weapon Group'
)}, ${i18nLocalize('Range')}, ${i18nLocalize(
'Damage'
)}, ${i18nLocalize('Qualities')}, ${i18nLocalize('Flaws')}`
)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
weaponsRanged,
ammunitions.contextElements.length > 0
? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
ammunitions.contextElements.length > 0
? new Text(
docBuilder.getGenerateType(),
0,
0,
`${i18nLocalize('Ammunition')} : ${i18nLocalize(
'Range'
)}, ${i18nLocalize('Damage')}, ${i18nLocalize(
'Qualities'
)}, ${i18nLocalize('Flaws')}`
)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
ammunitions,
armours.contextElements.length > 0
? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
armours.contextElements.length > 0
? new Text(docBuilder.getGenerateType(), 0, 0, 'Armour')
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
armours,
petty.contextElements.length > 0
? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
petty.contextElements.length > 0
? new Text(
docBuilder.getGenerateType(),
0,
0,
`${i18nLocalize('SHEET.PettySpell')} : ${i18nLocalize(
'Casting Number'
)}, ${i18nLocalize('Range')}, ${i18nLocalize(
'Target'
)}, ${i18nLocalize('Duration')}`
)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
petty,
spell.contextElements.length > 0
? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
spell.contextElements.length > 0
? new Text(
docBuilder.getGenerateType(),
0,
0,
`${i18nLocalize('SHEET.LoreSpell')} : ${i18nLocalize(
'Casting Number'
)}, ${i18nLocalize('Range')}, ${i18nLocalize(
'Target'
)}, ${i18nLocalize('Duration')}, ${i18nLocalize(
'WFRP4E.TrappingType.Ingredients'
)}`
)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
spell,
blessing.contextElements.length > 0
? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
blessing.contextElements.length > 0
? new Text(
docBuilder.getGenerateType(),
0,
0,
`${i18nLocalize('Blessing')} : ${i18nLocalize(
'Range'
)}, ${i18nLocalize('Target')}, ${i18nLocalize('Duration')}`
)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
blessing,
miracle.contextElements.length > 0
? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
miracle.contextElements.length > 0
? new Text(
docBuilder.getGenerateType(),
0,
0,
`${i18nLocalize('Miracle')} : ${i18nLocalize(
'Range'
)}, ${i18nLocalize('Target')}, ${i18nLocalize('Duration')}`
)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
miracle,
new Separator(docBuilder.getGenerateType(), 0, 0),
trappingsHeader,
trappings,
psychology.contextElements.length > 0
? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
psychology.contextElements.length > 0
? new Text(docBuilder.getGenerateType(), 0, 0, 'Psychology')
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
psychology,
critical.contextElements.length > 0
? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
critical.contextElements.length > 0
? new Text(docBuilder.getGenerateType(), 0, 0, 'Criticals')
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
critical,
disease.contextElements.length > 0
? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
disease.contextElements.length > 0
? new Text(docBuilder.getGenerateType(), 0, 0, 'Diseases')
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
disease,
injury.contextElements.length > 0
? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
injury.contextElements.length > 0
? new Text(docBuilder.getGenerateType(), 0, 0, 'Injuries')
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
injury,
mutationP.contextElements.length > 0
? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
mutationP.contextElements.length > 0
? new Text(
docBuilder.getGenerateType(),
0,
0,
`${i18nLocalize('Mutations')} (${i18nLocalize('Physical')})`
)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
mutationP,
mutationM.contextElements.length > 0
? new Separator(docBuilder.getGenerateType(), 0, 0)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
mutationM.contextElements.length > 0
? new Text(
docBuilder.getGenerateType(),
0,
0,
`${i18nLocalize('Mutations')} (${i18nLocalize('Mental')})`
)
: Blank.heightBlank(docBuilder.getGenerateType(), 0),
mutationM,
],
{
name: 'main-column',
}
),
]);
docBuilder.save(`${actor.name}`);
}