From bbfadbf43e1dc52753476657a62fb7155f0d96ee Mon Sep 17 00:00:00 2001 From: Balint Morasz Date: Wed, 18 Oct 2023 23:08:18 +0200 Subject: [PATCH] feat: fegyver in PDF (phase 1) --- README.md | 20 +- src/domain-models/felszereles.ts | 9 + src/pdf/character.pdf.ts | 323 +----------------------------- src/pdf/karakter_pdf_view.ts | 9 +- src/pdf/magic.pdf.ts | 30 +++ src/pdf/masodlagos_ertekek.pdf.ts | 147 ++++++++++++++ src/pdf/mentok.pdf.ts | 72 +++++++ src/pdf/osztaly_specials.pdf.ts | 42 ++++ src/pdf/tulajdonsagok.pdf.ts | 90 +++++++++ 9 files changed, 420 insertions(+), 322 deletions(-) create mode 100644 src/pdf/magic.pdf.ts create mode 100644 src/pdf/masodlagos_ertekek.pdf.ts create mode 100644 src/pdf/mentok.pdf.ts create mode 100644 src/pdf/osztaly_specials.pdf.ts create mode 100644 src/pdf/tulajdonsagok.pdf.ts diff --git a/README.md b/README.md index b87cb00..ca910c3 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,18 @@ -# Getting Started with Create React App +# KéM karakter app + +Kard és Mágia Karakter alkotó alkalmazás + +Please excuse the Hungish, the domain language of KéM is hungarian, but the domain language of programming is english, which created this monster. + +## Getting Started with Create React App This project was bootstrapped with [Create React App](https://github.com/facebook/create-react-app). -## Available Scripts +### Available Scripts In the project directory, you can run: -### `npm start` +#### `yarn start` Runs the app in the development mode.\ Open [http://localhost:3000](http://localhost:3000) to view it in the browser. @@ -14,12 +20,12 @@ Open [http://localhost:3000](http://localhost:3000) to view it in the browser. The page will reload if you make edits.\ You will also see any lint errors in the console. -### `npm test` +#### `yarn test` Launches the test runner in the interactive watch mode.\ See the section about [running tests](https://facebook.github.io/create-react-app/docs/running-tests) for more information. -### `npm run build` +#### `yarn run build` Builds the app for production to the `build` folder.\ It correctly bundles React in production mode and optimizes the build for the best performance. @@ -29,7 +35,7 @@ Your app is ready to be deployed! See the section about [deployment](https://facebook.github.io/create-react-app/docs/deployment) for more information. -### `npm run eject` +#### `yarn run eject` **Note: this is a one-way operation. Once you `eject`, you can’t go back!** @@ -39,7 +45,7 @@ Instead, it will copy all the configuration files and the transitive dependencie You don’t have to ever use `eject`. The curated feature set is suitable for small and middle deployments, and you shouldn’t feel obligated to use this feature. However we understand that this tool wouldn’t be useful if you couldn’t customize it when you are ready for it. -## Learn More +### Learn More You can learn more in the [Create React App documentation](https://facebook.github.io/create-react-app/docs/getting-started). diff --git a/src/domain-models/felszereles.ts b/src/domain-models/felszereles.ts index 4d724da..efd4b45 100644 --- a/src/domain-models/felszereles.ts +++ b/src/domain-models/felszereles.ts @@ -1,5 +1,6 @@ import pancelok from './pancel.json' import pajzsok from './pajzs.json' +import fegyverek from './fegyver.json' export type PancelType = 'konnyu' | 'kozepes' | 'nehez' @@ -87,4 +88,12 @@ export function GetPajzs(id?: string): Pajzs | undefined { } const filtered = pajzsok['pajzs'].filter(p => p.ID === id) as Pajzs[] return filtered.length > 0 ? filtered[0] : undefined +} + +export function GetFegyver(id: string): Fegyver | undefined { + return fegyverek.fegyverek.find(f => f.ID === id) as Fegyver | undefined +} + +export function GetFegyverek(ids: string[]): Fegyver[] { + return ids.map(GetFegyver).filter(x => x != null).map(x => x as Fegyver) } \ No newline at end of file diff --git a/src/pdf/character.pdf.ts b/src/pdf/character.pdf.ts index 287ce45..1857b73 100644 --- a/src/pdf/character.pdf.ts +++ b/src/pdf/character.pdf.ts @@ -1,164 +1,13 @@ import {KarakterPdfView, KepzettsegPdfView} from "./karakter_pdf_view"; -import {PDFDocument, PDFFont, PDFPage, rgb} from "pdf-lib"; +import {PDFDocument, rgb} from "pdf-lib"; import fontkit from '@pdf-lib/fontkit' import {SignedNumberToText} from "../components/Helpers"; -import {KarakterTulajdonsagok, Modifier} from "../domain-models/tulajdonsag"; import download from "downloadjs"; - -function drawTulajdonsagok(page: PDFPage, tulajdonsagok: KarakterTulajdonsagok, fontSizeBase: number, pdfFont: PDFFont) { - page.drawText(tulajdonsagok.t_ero.toString(), { - x: 130, - y: 613, - size: fontSizeBase * 2, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(SignedNumberToText(Modifier(tulajdonsagok.t_ero)), { - x: 176, - y: 613, - size: fontSizeBase * 2, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(tulajdonsagok.t_ugy.toString(), { - x: 130, - y: 580, - size: fontSizeBase * 2, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(SignedNumberToText(Modifier(tulajdonsagok.t_ugy)), { - x: 176, - y: 580, - size: fontSizeBase * 2, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(tulajdonsagok.t_egs.toString(), { - x: 130, - y: 547, - size: fontSizeBase * 2, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(SignedNumberToText(Modifier(tulajdonsagok.t_egs)), { - x: 176, - y: 547, - size: fontSizeBase * 2, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(tulajdonsagok.t_int.toString(), { - x: 130, - y: 515, - size: fontSizeBase * 2, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(SignedNumberToText(Modifier(tulajdonsagok.t_int)), { - x: 176, - y: 515, - size: fontSizeBase * 2, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(tulajdonsagok.t_bol.toString(), { - x: 130, - y: 482, - size: fontSizeBase * 2, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(SignedNumberToText(Modifier(tulajdonsagok.t_bol)), { - x: 176, - y: 482, - size: fontSizeBase * 2, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(tulajdonsagok.t_kar.toString(), { - x: 130, - y: 449, - size: fontSizeBase * 2, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(SignedNumberToText(Modifier(tulajdonsagok.t_kar)), { - x: 176, - y: 449, - size: fontSizeBase * 2, - font: pdfFont, - color: rgb(0, 0, 0), - }) -} - -function drawMentok(page: PDFPage, karakter: KarakterPdfView, fontSizeBase: number, pdfFont: PDFFont) { - const mentokAlap = karakter.MentokAlap - page.drawText(SignedNumberToText(mentokAlap.kitartas), { - x: 435, - y: 613, - size: fontSizeBase, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(SignedNumberToText(mentokAlap.reflex), { - x: 435, - y: 580, - size: fontSizeBase, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(SignedNumberToText(mentokAlap.akaratero), { - x: 435, - y: 547, - size: fontSizeBase, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(SignedNumberToText(Modifier(karakter.Tulajdonsagok.t_egs)), { - x: 475, - y: 613, - size: fontSizeBase, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(SignedNumberToText(Modifier(karakter.Tulajdonsagok.t_ugy)), { - x: 475, - y: 580, - size: fontSizeBase, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(SignedNumberToText(Modifier(karakter.Tulajdonsagok.t_bol)), { - x: 475, - y: 547, - size: fontSizeBase, - font: pdfFont, - color: rgb(0, 0, 0), - }) - const mentok = karakter.MentokModositokkal - page.drawText(SignedNumberToText(mentok.kitartas), { - x: 515, - y: 613, - size: fontSizeBase, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(SignedNumberToText(mentok.reflex), { - x: 515, - y: 580, - size: fontSizeBase, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(SignedNumberToText(mentok.akaratero), { - x: 515, - y: 547, - size: fontSizeBase, - font: pdfFont, - color: rgb(0, 0, 0), - }) -} +import {DrawTulajdonsagok} from "./tulajdonsagok.pdf"; +import {DrawMentok} from "./mentok.pdf"; +import {DrawMagic} from "./magic.pdf"; +import {DrawMasodlagosErtekek} from './masodlagos_ertekek.pdf' +import {DrawOsztalySpecialsPage} from './osztaly_specials.pdf' function drawBaseInfo(karakter: KarakterPdfView, draw: (text: string, x : number ,y: number, scale: number) => void) { draw(karakter.Name, 60, 710, 1) @@ -188,35 +37,6 @@ function DrawFelszereles(draw: (text: string, x: number, y:number) => void, fels } } -function DrawMagic(page: PDFPage, fontSizeBase: number, pdfFont: PDFFont, napiVarazslatok: number[], varazsMentokNF: number[]){ - for(let i = 0; i < 6; i++) { - const y = 247 - (i*18) - page.drawText(i.toString(), { - x: 210, - y: y, - size: fontSizeBase, - font: pdfFont, - color: rgb(0, 0, 0), - }) - if (i < napiVarazslatok.length) { - page.drawText(napiVarazslatok[i].toString(), { - x: 242, - y: y, - size: fontSizeBase, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(varazsMentokNF[i].toString(), { - x: 269, - y: y, - size: fontSizeBase, - font: pdfFont, - color: rgb(0, 0, 0), - }) - } - } -} - export async function CreatePDF(karakter: KarakterPdfView) { const existingPdfBytes = await fetch('/km_karakterlap_hysteria_1.2.pdf').then(res => res.arrayBuffer()) @@ -242,94 +62,11 @@ export async function CreatePDF(karakter: KarakterPdfView) { drawBaseInfo(karakter, drawText); - drawTulajdonsagok(page, karakter.Tulajdonsagok, fontSizeBase, pdfFont); + DrawTulajdonsagok(page, karakter.Tulajdonsagok, fontSizeBase, pdfFont); - page.drawText(karakter.Mozgas.toString(), { - x: 162, - y: 416, - size: fontSizeBase * 2, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(SignedNumberToText(karakter.Kezdemenyezes), { - x: 505, - y: 416, - size: fontSizeBase * 2, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(karakter.HP.toString(), { - x: 318, - y: 517, - size: fontSizeBase * 1.5, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(karakter.VO.toString(), { - x: 368, - y: 495, - size: fontSizeBase * 3, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(karakter.PancelVO.toString(), { - x: 512, - y: 515, - size: fontSizeBase * 2, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(karakter.PajzsVO.toString(), { - x: 512, - y: 482, - size: fontSizeBase * 2, - font: pdfFont, - color: rgb(0, 0, 0), - }) - const kozelharciTB = karakter.KozelharciTB.map(SignedNumberToText).join("/") + DrawMasodlagosErtekek(page, karakter, fontSizeBase, pdfFont); - function getFontSize(length: number): number { - switch (length) { - case 1: - case 2: - return 24; - case 3: - return 18; - case 4: - return 14; - case 5: - return 11; - case 6: - return 9; - case 7: - return 8; - default: - return 6; - } - } - function getYOffset(length: number): number { - return Math.min(length-2, 6); - } - - const kozelHarciFontSize = getFontSize(kozelharciTB.length) - page.drawText(kozelharciTB, { - x: kozelharciTB.length > 4 ? 256 : 258, - y: 383 + getYOffset(kozelharciTB.length), - size: kozelHarciFontSize, - font: pdfFont, - color: rgb(0, 0, 0), - }) - const celzoTB = karakter.CelzoTB.map(SignedNumberToText).join("/") - const celzoFontSize = getFontSize(celzoTB.length) - page.drawText(celzoTB, { - x: celzoTB.length > 4 ? 343 : 346, - y: 383 + getYOffset(celzoTB.length), - size: celzoFontSize, - font: pdfFont, - color: rgb(0, 0, 0), - }) - - drawMentok(page, karakter, fontSizeBase, pdfFont); + DrawMentok(page, karakter, fontSizeBase, pdfFont); DrawKepzettsegek(drawText, karakter.Kepzettsegek, 337); const nextKepzettsegFrom = 337 - (karakter.Kepzettsegek.length * 18) @@ -340,49 +77,9 @@ export async function CreatePDF(karakter: KarakterPdfView) { DrawMagic(page, fontSizeBase, pdfFont, karakter.NapiMemorizalhatoVarazslatok, karakter.VarazslatMentokNF) const secondPage = pdfDoc.addPage() - DrawSecondPage(secondPage, pdfFont, karakter) - + DrawOsztalySpecialsPage(secondPage, pdfFont, karakter) const pdfBytes = await pdfDoc.save(); download(pdfBytes, karakter.Name + ".pdf", "application/pdf"); } -function DrawSecondPage(page: PDFPage, font: PDFFont, karakter: KarakterPdfView){ - const baseFontSize = 12 - const titleFontSize = baseFontSize * 3 - const pageCenterX = page.getWidth()/2 - const titleWidth = font.widthOfTextAtSize(karakter.Osztaly, titleFontSize) - const titleX = pageCenterX - (titleWidth / 2) - page.drawText(karakter.Osztaly, { - x: titleX, - y: 770, - size: titleFontSize, - font: font, - color: rgb(0, 0, 0), - }) - let rows = 0 - // const margin = 30 - // const textWidth = page.getWidth() - 2*margin; - for (let i = 0; i < karakter.OsztalySkills.length; i++) { - const skill = karakter.OsztalySkills[i]; - page.drawText(skill.Name, { - x: 30, - y: 720 - rows, - size: baseFontSize, - font: font, - color: rgb(0, 0, 0), - }) - page.drawText(skill.Description, { - x: 30, - y: 700 - rows, - size: baseFontSize, - font: font, - lineHeight: 16, - color: rgb(0, 0, 0), - // maxWidth: textWidth, - // wordBreaks: [' ', '-'] - }) - // rows += Math.ceil(font.widthOfTextAtSize(skill.Description, baseFontSize)/textWidth)*20 + 30 - rows += skill.Description.split('\n').length*16 + 30 - } -} diff --git a/src/pdf/karakter_pdf_view.ts b/src/pdf/karakter_pdf_view.ts index 8798b61..21eb9cc 100644 --- a/src/pdf/karakter_pdf_view.ts +++ b/src/pdf/karakter_pdf_view.ts @@ -16,7 +16,7 @@ import {CelzoTB, KozelharciTB} from "../domain-models/tamadas_bonusz"; import {KarakterInputs} from "../domain-models/karakter"; import {NapiVarazslatok, CalculateVarazslatMentokNF} from "../domain-models/memorizalt_varazslatok"; import {GetJellem} from "../domain-models/jellem"; -import {GetPancel, GetPajzs} from '../domain-models/felszereles' +import {GetPancel, GetPajzs, Fegyver, GetFegyverek} from '../domain-models/felszereles' export interface KepzettsegPdfView { KepzettsegName: string @@ -51,6 +51,7 @@ export interface KarakterPdfView { Felszereles: string[] PancelVO: number PajzsVO: number + Fegyverek: Fegyver[] } export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfView { @@ -68,6 +69,9 @@ export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfVie const NapiMemorizalhatoVarazslatok = NapiVarazslatok(karakter) const VarazslatMentokNF = CalculateVarazslatMentokNF(karakter) + const fegyverek = GetFegyverek(karakter.felszereles.fegyverIDk) + + const felszereles = [ pancel?.Name, pajzs?.Name, ...fegyverek.filter(f => f.ID !== 'okol').map(f => f.Name.includes('és') ? f.Name.split(' ')[0] : f.Name) ].filter(x => !!x) as string[] return { Faj: FajLabel(karakter.faj), @@ -97,9 +101,10 @@ export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfVie NapiMemorizalhatoVarazslatok, VarazslatMentokNF, - Felszereles: [pancel?.Name, pajzs?.Name].filter(x => !!x) as string[], + Felszereles: felszereles, PajzsVO: pajzs?.VO ?? 0, PancelVO: pancel?.VO ?? 0, + Fegyverek: fegyverek, } } diff --git a/src/pdf/magic.pdf.ts b/src/pdf/magic.pdf.ts new file mode 100644 index 0000000..b7577f8 --- /dev/null +++ b/src/pdf/magic.pdf.ts @@ -0,0 +1,30 @@ +import {PDFFont, PDFPage, rgb} from "pdf-lib"; + +export function DrawMagic(page: PDFPage, fontSizeBase: number, pdfFont: PDFFont, napiVarazslatok: number[], varazsMentokNF: number[]){ + for(let i = 0; i < 6; i++) { + const y = 247 - (i*18) + page.drawText(i.toString(), { + x: 210, + y: y, + size: fontSizeBase, + font: pdfFont, + color: rgb(0, 0, 0), + }) + if (i < napiVarazslatok.length) { + page.drawText(napiVarazslatok[i].toString(), { + x: 242, + y: y, + size: fontSizeBase, + font: pdfFont, + color: rgb(0, 0, 0), + }) + page.drawText(varazsMentokNF[i].toString(), { + x: 269, + y: y, + size: fontSizeBase, + font: pdfFont, + color: rgb(0, 0, 0), + }) + } + } +} diff --git a/src/pdf/masodlagos_ertekek.pdf.ts b/src/pdf/masodlagos_ertekek.pdf.ts new file mode 100644 index 0000000..e1e90f8 --- /dev/null +++ b/src/pdf/masodlagos_ertekek.pdf.ts @@ -0,0 +1,147 @@ +import {PDFFont, PDFPage} from "pdf-lib"; +import {KarakterPdfView} from "./karakter_pdf_view"; +import {SignedNumberToText} from "../components/Helpers"; + +function drawFegyverek(karakter: KarakterPdfView, pdfFont: PDFFont, fontSizeBase: number, page: PDFPage) { + const startFrom = 337 + for (let i = 0; i < karakter.Fegyverek.length && i < 3; i++) { + const fegyver = karakter.Fegyverek[i]; + const simplifiedName = fegyver.Name.includes('és') ? fegyver.Name.split(' ')[0] : fegyver.Name + const size = fitTextInWidth(pdfFont, simplifiedName, fontSizeBase, 60) + page.drawText(simplifiedName, { + x: 200, + y: startFrom - (i * 18) + ((18 - pdfFont.heightAtSize(size)) / 3), + size: size, + font: pdfFont, + }) + const tb = SignedNumberToText(fegyver.Type === 'kozelharci' ? karakter.KozelharciTB[0] : karakter.CelzoTB[0]) + page.drawText(tb, { + x: 265, + y: startFrom - (i * 18), + size: fontSizeBase, + font: pdfFont, + }) + const damage = `${fegyver.NumberOfDamageDice > 1 ? fegyver.NumberOfDamageDice.toString() : ''}d${fegyver.DamageDice}${fegyver.Type === 'kozelharci' && karakter.TulajdonsagModositok.t_ero > 0 ? ` + ${karakter.TulajdonsagModositok.t_ero}` : ''}` + const damageSize = fitTextInWidth(pdfFont, damage, fontSizeBase, 24) + if (damageSize !== fontSizeBase) { + console.log('font size: ', damageSize) + console.log('width of text: ', pdfFont.widthOfTextAtSize(damage, damageSize)) + } + page.drawText(damage, { + x: 291, + y: startFrom - (i * 18) + ((18 - pdfFont.heightAtSize(damageSize)) / 3), + size: damageSize, + font: pdfFont, + }) + const crit = `${fegyver.CritRangeStart < 20 ? `${fegyver.CritRangeStart}-20` : '20'} x${fegyver.CritMultiplier}` + const critSize = fitTextInWidth(pdfFont, crit, fontSizeBase, 35) + page.drawText(crit, { + x: 318, + y: startFrom - (i * 18) + ((18 - pdfFont.heightAtSize(critSize)) / 3), + size: critSize, + font: pdfFont, + }) + const range = fegyver.Range === 0 ? '-' : fegyver.Range.toString() + page.drawText(range, { + x: 360, + y: startFrom - (i * 18), + size: fontSizeBase, + font: pdfFont, + }) + } +} + +export function DrawMasodlagosErtekek( + page: PDFPage, + karakter: KarakterPdfView, + fontSizeBase: number, + pdfFont: PDFFont) +{ + page.drawText(karakter.Mozgas.toString(), { + x: 162, + y: 416, + size: fontSizeBase * 2, + font: pdfFont, + }) + page.drawText(SignedNumberToText(karakter.Kezdemenyezes), { + x: 505, + y: 416, + size: fontSizeBase * 2, + font: pdfFont, + }) + page.drawText(karakter.HP.toString(), { + x: 318, + y: 517, + size: fontSizeBase * 1.5, + font: pdfFont, + }) + page.drawText(karakter.VO.toString(), { + x: 368, + y: 495, + size: fontSizeBase * 3, + font: pdfFont, + }) + page.drawText(karakter.PancelVO.toString(), { + x: 512, + y: 515, + size: fontSizeBase * 2, + font: pdfFont, + }) + page.drawText(karakter.PajzsVO.toString(), { + x: 512, + y: 482, + size: fontSizeBase * 2, + font: pdfFont, + }) + const kozelharciTB = karakter.KozelharciTB.map(SignedNumberToText).join("/") + + function getFontSize(length: number): number { + switch (length) { + case 1: + case 2: + return 24; + case 3: + return 18; + case 4: + return 14; + case 5: + return 11; + case 6: + return 9; + case 7: + return 8; + default: + return 6; + } + } + + function getYOffset(length: number): number { + return Math.min(length - 2, 6); + } + + const kozelHarciFontSize = getFontSize(kozelharciTB.length) + page.drawText(kozelharciTB, { + x: kozelharciTB.length > 4 ? 256 : 258, + y: 383 + getYOffset(kozelharciTB.length), + size: kozelHarciFontSize, + font: pdfFont, + }) + const celzoTB = karakter.CelzoTB.map(SignedNumberToText).join("/") + const celzoFontSize = getFontSize(celzoTB.length) + page.drawText(celzoTB, { + x: celzoTB.length > 4 ? 343 : 346, + y: 383 + getYOffset(celzoTB.length), + size: celzoFontSize, + font: pdfFont, + }) + + drawFegyverek(karakter, pdfFont, fontSizeBase, page); +} + +function fitTextInWidth(font: PDFFont, text: string, startingSize: number, maxWidth: number): number { + let size = startingSize + while(font.widthOfTextAtSize(text, size) > maxWidth) { + size-- + } + return size +} diff --git a/src/pdf/mentok.pdf.ts b/src/pdf/mentok.pdf.ts new file mode 100644 index 0000000..c3bf73b --- /dev/null +++ b/src/pdf/mentok.pdf.ts @@ -0,0 +1,72 @@ +import {PDFFont, PDFPage, rgb} from "pdf-lib"; +import {KarakterPdfView} from "./karakter_pdf_view"; +import {SignedNumberToText} from "../components/Helpers"; +import {Modifier} from "../domain-models/tulajdonsag"; + +export function DrawMentok(page: PDFPage, karakter: KarakterPdfView, fontSizeBase: number, pdfFont: PDFFont) { + const mentokAlap = karakter.MentokAlap + page.drawText(SignedNumberToText(mentokAlap.kitartas), { + x: 435, + y: 613, + size: fontSizeBase, + font: pdfFont, + color: rgb(0, 0, 0), + }) + page.drawText(SignedNumberToText(mentokAlap.reflex), { + x: 435, + y: 580, + size: fontSizeBase, + font: pdfFont, + color: rgb(0, 0, 0), + }) + page.drawText(SignedNumberToText(mentokAlap.akaratero), { + x: 435, + y: 547, + size: fontSizeBase, + font: pdfFont, + color: rgb(0, 0, 0), + }) + page.drawText(SignedNumberToText(Modifier(karakter.Tulajdonsagok.t_egs)), { + x: 475, + y: 613, + size: fontSizeBase, + font: pdfFont, + color: rgb(0, 0, 0), + }) + page.drawText(SignedNumberToText(Modifier(karakter.Tulajdonsagok.t_ugy)), { + x: 475, + y: 580, + size: fontSizeBase, + font: pdfFont, + color: rgb(0, 0, 0), + }) + page.drawText(SignedNumberToText(Modifier(karakter.Tulajdonsagok.t_bol)), { + x: 475, + y: 547, + size: fontSizeBase, + font: pdfFont, + color: rgb(0, 0, 0), + }) + const mentok = karakter.MentokModositokkal + page.drawText(SignedNumberToText(mentok.kitartas), { + x: 515, + y: 613, + size: fontSizeBase, + font: pdfFont, + color: rgb(0, 0, 0), + }) + page.drawText(SignedNumberToText(mentok.reflex), { + x: 515, + y: 580, + size: fontSizeBase, + font: pdfFont, + color: rgb(0, 0, 0), + }) + page.drawText(SignedNumberToText(mentok.akaratero), { + x: 515, + y: 547, + size: fontSizeBase, + font: pdfFont, + color: rgb(0, 0, 0), + }) +} diff --git a/src/pdf/osztaly_specials.pdf.ts b/src/pdf/osztaly_specials.pdf.ts new file mode 100644 index 0000000..09d8007 --- /dev/null +++ b/src/pdf/osztaly_specials.pdf.ts @@ -0,0 +1,42 @@ +import {PDFFont, PDFPage, rgb} from "pdf-lib"; +import {KarakterPdfView} from "./karakter_pdf_view"; + +export function DrawOsztalySpecialsPage(page: PDFPage, font: PDFFont, karakter: KarakterPdfView){ + const baseFontSize = 12 + const titleFontSize = baseFontSize * 3 + const pageCenterX = page.getWidth()/2 + const titleWidth = font.widthOfTextAtSize(karakter.Osztaly, titleFontSize) + const titleX = pageCenterX - (titleWidth / 2) + page.drawText(karakter.Osztaly, { + x: titleX, + y: 770, + size: titleFontSize, + font: font, + color: rgb(0, 0, 0), + }) + let rows = 0 + // const margin = 30 + // const textWidth = page.getWidth() - 2*margin; + for (let i = 0; i < karakter.OsztalySkills.length; i++) { + const skill = karakter.OsztalySkills[i]; + page.drawText(skill.Name, { + x: 30, + y: 720 - rows, + size: baseFontSize, + font: font, + color: rgb(0, 0, 0), + }) + page.drawText(skill.Description, { + x: 30, + y: 700 - rows, + size: baseFontSize, + font: font, + lineHeight: 16, + color: rgb(0, 0, 0), + // maxWidth: textWidth, + // wordBreaks: [' ', '-'] + }) + // rows += Math.ceil(font.widthOfTextAtSize(skill.Description, baseFontSize)/textWidth)*20 + 30 + rows += skill.Description.split('\n').length*16 + 30 + } +} diff --git a/src/pdf/tulajdonsagok.pdf.ts b/src/pdf/tulajdonsagok.pdf.ts new file mode 100644 index 0000000..4fe326a --- /dev/null +++ b/src/pdf/tulajdonsagok.pdf.ts @@ -0,0 +1,90 @@ +import {PDFFont, PDFPage, rgb} from "pdf-lib"; +import {KarakterTulajdonsagok, Modifier} from "../domain-models/tulajdonsag"; +import {SignedNumberToText} from "../components/Helpers"; + +export function DrawTulajdonsagok(page: PDFPage, tulajdonsagok: KarakterTulajdonsagok, fontSizeBase: number, pdfFont: PDFFont) { + page.drawText(tulajdonsagok.t_ero.toString(), { + x: 130, + y: 613, + size: fontSizeBase * 2, + font: pdfFont, + color: rgb(0, 0, 0), + }) + page.drawText(SignedNumberToText(Modifier(tulajdonsagok.t_ero)), { + x: 176, + y: 613, + size: fontSizeBase * 2, + font: pdfFont, + color: rgb(0, 0, 0), + }) + page.drawText(tulajdonsagok.t_ugy.toString(), { + x: 130, + y: 580, + size: fontSizeBase * 2, + font: pdfFont, + color: rgb(0, 0, 0), + }) + page.drawText(SignedNumberToText(Modifier(tulajdonsagok.t_ugy)), { + x: 176, + y: 580, + size: fontSizeBase * 2, + font: pdfFont, + color: rgb(0, 0, 0), + }) + page.drawText(tulajdonsagok.t_egs.toString(), { + x: 130, + y: 547, + size: fontSizeBase * 2, + font: pdfFont, + color: rgb(0, 0, 0), + }) + page.drawText(SignedNumberToText(Modifier(tulajdonsagok.t_egs)), { + x: 176, + y: 547, + size: fontSizeBase * 2, + font: pdfFont, + color: rgb(0, 0, 0), + }) + page.drawText(tulajdonsagok.t_int.toString(), { + x: 130, + y: 515, + size: fontSizeBase * 2, + font: pdfFont, + color: rgb(0, 0, 0), + }) + page.drawText(SignedNumberToText(Modifier(tulajdonsagok.t_int)), { + x: 176, + y: 515, + size: fontSizeBase * 2, + font: pdfFont, + color: rgb(0, 0, 0), + }) + page.drawText(tulajdonsagok.t_bol.toString(), { + x: 130, + y: 482, + size: fontSizeBase * 2, + font: pdfFont, + color: rgb(0, 0, 0), + }) + page.drawText(SignedNumberToText(Modifier(tulajdonsagok.t_bol)), { + x: 176, + y: 482, + size: fontSizeBase * 2, + font: pdfFont, + color: rgb(0, 0, 0), + }) + page.drawText(tulajdonsagok.t_kar.toString(), { + x: 130, + y: 449, + size: fontSizeBase * 2, + font: pdfFont, + color: rgb(0, 0, 0), + }) + page.drawText(SignedNumberToText(Modifier(tulajdonsagok.t_kar)), { + x: 176, + y: 449, + size: fontSizeBase * 2, + font: pdfFont, + color: rgb(0, 0, 0), + }) +}