From 3954d7be91c23d7d3957c377777d28a38a36cd10 Mon Sep 17 00:00:00 2001 From: Balint Morasz Date: Sat, 9 Sep 2023 20:00:17 +0200 Subject: [PATCH] add some more basic info for character description --- src/domain-models/karakter.ts | 12 ++ src/pages/CreateCharacter.tsx | 25 ++++ src/pdf/character.pdf.ts | 252 +++++++++++++++++----------------- 3 files changed, 164 insertions(+), 125 deletions(-) diff --git a/src/domain-models/karakter.ts b/src/domain-models/karakter.ts index 201923d..b120ff1 100644 --- a/src/domain-models/karakter.ts +++ b/src/domain-models/karakter.ts @@ -6,6 +6,9 @@ import {Kepzettseg} from "./kepzettsegek"; export interface Karakter { Name: string + Nem: string + Kor: number + Isten: string Faj: Faj Osztaly: Osztaly Tulajdonsagok: KarakterTulajdonsagok, @@ -27,6 +30,9 @@ export interface Karakter { export class KarakterClass implements Karakter { public Name : string + public Nem : string + public Kor : number + public Isten : string public Faj : Faj public Osztaly : Osztaly public Tulajdonsagok : KarakterTulajdonsagok @@ -37,6 +43,9 @@ export class KarakterClass implements Karakter { constructor( name: string, + nem: string, + kor: number, + isten: string, faj: Faj, osztaly: Osztaly, tulajdonsagok: KarakterTulajdonsagok, @@ -44,6 +53,9 @@ export class KarakterClass implements Karakter { tolvajKepzettsegek: Kepzettseg[] = [] ) { this.Name = name + this.Nem = nem + this.Kor = kor + this.Isten = isten this.Faj = faj this.Osztaly = osztaly this.Tulajdonsagok = tulajdonsagok diff --git a/src/pages/CreateCharacter.tsx b/src/pages/CreateCharacter.tsx index 2c68559..f72041f 100644 --- a/src/pages/CreateCharacter.tsx +++ b/src/pages/CreateCharacter.tsx @@ -39,6 +39,9 @@ function getNumberOfKepzettsegek(t_int: number, faj: Faj, max: number) { function CreateCharacterPage() { let [name, changeName] = useState("Névtelen kalandozó") + let [nem, changeNem] = useState("") + let [kor, changeKor] = useState(20) + let [isten, changeIsten] = useState("") let [faj, changeFaj] = useState(Faj.Ember) let [tulajdonsagok, changeTulajdonsagok] = useState(tulajdonsagDefaults) let [osztaly, changeOsztaly] = useState(Osztaly.Harcos) @@ -58,6 +61,9 @@ function CreateCharacterPage() { const karakter = () => new KarakterClass( name, + nem, + kor, + isten, faj, osztaly, tulajdonsagok, @@ -82,6 +88,25 @@ function CreateCharacterPage() { onChange={(e) => changeName(e.target.value)}/> {!name && A karaktered nem mászkálhat névtelenül a világban!} +
+ + changeNem(e.target.value)}/> +
+
+ + changeKor(Number(e.target.value))}/> +
+
+ + changeIsten(e.target.value)}/> +
res.arrayBuffer()) - const pdfDoc = await PDFDocument.load(existingPdfBytes) - pdfDoc.registerFontkit(fontkit) - - const fontBytes = await fetch('/Merienda-Regular.ttf').then(res => res.arrayBuffer()) - const pdfFont = await pdfDoc.embedFont(fontBytes) - // const pdfFont = await pdfDoc.embedFont(StandardFonts.TimesNewRoman) - const fontSizeBase = 12 - - const page = pdfDoc.getPage(0) - - page.drawText(karakter.Name, { - x: 60, - y: 710, - size: fontSizeBase, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(OsztalyLabel(karakter.Osztaly), { - x: 60, - y: 672, - size: fontSizeBase, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(karakter.Szint.toString(), { - x: 264, - y: 682, - size: fontSizeBase * 3, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(FajLabel(karakter.Faj), { - x: 304, - y: 710, - size: fontSizeBase, - font: pdfFont, - color: rgb(0, 0, 0), - }) - page.drawText(karakter.Tulajdonsagok.t_ero.toString(), { +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(karakter.Tulajdonsagok.t_ero)), { + page.drawText(SignedNumberToText(Modifier(tulajdonsagok.t_ero)), { x: 176, y: 613, size: fontSizeBase * 2, font: pdfFont, color: rgb(0, 0, 0), }) - page.drawText(karakter.Tulajdonsagok.t_ugy.toString(), { + page.drawText(tulajdonsagok.t_ugy.toString(), { x: 130, y: 580, size: fontSizeBase * 2, font: pdfFont, color: rgb(0, 0, 0), }) - page.drawText(SignedNumberToText(Modifier(karakter.Tulajdonsagok.t_ugy)), { + page.drawText(SignedNumberToText(Modifier(tulajdonsagok.t_ugy)), { x: 176, y: 580, size: fontSizeBase * 2, font: pdfFont, color: rgb(0, 0, 0), }) - page.drawText(karakter.Tulajdonsagok.t_egs.toString(), { + page.drawText(tulajdonsagok.t_egs.toString(), { x: 130, y: 547, size: fontSizeBase * 2, font: pdfFont, color: rgb(0, 0, 0), }) - page.drawText(SignedNumberToText(Modifier(karakter.Tulajdonsagok.t_egs)), { + page.drawText(SignedNumberToText(Modifier(tulajdonsagok.t_egs)), { x: 176, y: 547, size: fontSizeBase * 2, font: pdfFont, color: rgb(0, 0, 0), }) - page.drawText(karakter.Tulajdonsagok.t_int.toString(), { + page.drawText(tulajdonsagok.t_int.toString(), { x: 130, y: 515, size: fontSizeBase * 2, font: pdfFont, color: rgb(0, 0, 0), }) - page.drawText(SignedNumberToText(Modifier(karakter.Tulajdonsagok.t_int)), { + page.drawText(SignedNumberToText(Modifier(tulajdonsagok.t_int)), { x: 176, y: 515, size: fontSizeBase * 2, font: pdfFont, color: rgb(0, 0, 0), }) - page.drawText(karakter.Tulajdonsagok.t_bol.toString(), { + page.drawText(tulajdonsagok.t_bol.toString(), { x: 130, y: 482, size: fontSizeBase * 2, font: pdfFont, color: rgb(0, 0, 0), }) - page.drawText(SignedNumberToText(Modifier(karakter.Tulajdonsagok.t_bol)), { + page.drawText(SignedNumberToText(Modifier(tulajdonsagok.t_bol)), { x: 176, y: 482, size: fontSizeBase * 2, font: pdfFont, color: rgb(0, 0, 0), }) - page.drawText(karakter.Tulajdonsagok.t_kar.toString(), { + page.drawText(tulajdonsagok.t_kar.toString(), { x: 130, y: 449, size: fontSizeBase * 2, font: pdfFont, color: rgb(0, 0, 0), }) - page.drawText(SignedNumberToText(Modifier(karakter.Tulajdonsagok.t_kar)), { + page.drawText(SignedNumberToText(Modifier(tulajdonsagok.t_kar)), { x: 176, y: 449, size: fontSizeBase * 2, font: pdfFont, color: rgb(0, 0, 0), }) +} - 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.5, 0.5, 0.5), - }) - const kozelharciTB = SignedNumberToText(karakter.KozelharciTB()) - page.drawText(kozelharciTB, { - x: 258, - y: 382, - size: kozelharciTB.length > 2 ? (fontSizeBase * 1.5) : fontSizeBase * 2, - font: pdfFont, - color: rgb(0, 0, 0), - }) - const celzoTB = SignedNumberToText(karakter.CelzoTB()) - page.drawText(celzoTB, { - x: 347, - y: 382, - size: celzoTB.length > 2 ? (fontSizeBase * 1.5) : fontSizeBase * 2, - font: pdfFont, - color: rgb(0, 0, 0), - }) - +function drawMentok(page: PDFPage, karakter: Karakter, fontSizeBase: number, pdfFont: PDFFont) { page.drawText(SignedNumberToText(karakter.KitartasMentoAlap()), { x: 435, y: 613, @@ -242,37 +159,122 @@ export async function CreatePDF(karakter: Karakter) { font: pdfFont, color: rgb(0, 0, 0), }) +} - function DrawKepzettsegek(kepzettsegek: Kepzettseg[], startFrom: number) { - for (let i = 0; i < kepzettsegek.length; i++) { - let kepzettseg = kepzettsegek[i] - page.drawText(kepzettseg.Name, { - x: 60, - y: startFrom - (i * 18), - size: fontSizeBase, - font: pdfFont, - color: rgb(0, 0, 0), - }) - const tulajdonsagErtek = kepzettseg.Tulajdonsag.reduce((maxTulajdonsagErtek, currentTulajdonsag) => - (karakter.Tulajdonsagok[currentTulajdonsag] > maxTulajdonsagErtek) - ? karakter.Tulajdonsagok[kepzettseg.Tulajdonsag[i]] +function drawBaseInfo(karakter: Karakter, draw: (text: string, x : number ,y: number, scale: number) => void) { + draw(karakter.Name, 60, 710, 1) + draw(karakter.Nem, 454, 710, 1) + draw(karakter.Kor.toString(), 454, 690, 1) + draw(karakter.Isten, 454, 670, 1) + draw(OsztalyLabel(karakter.Osztaly), 60, 672, 1) + draw(karakter.Szint.toString(), 264, 682, 3) + draw(FajLabel(karakter.Faj), 304, 710, 1) +} + +function DrawKepzettsegek(page: PDFPage, fontSizeBase: number, pdfFont: PDFFont, kepzettsegek: Kepzettseg[], tulajdonsagok: KarakterTulajdonsagok, szint: number, startFrom: number) { + for (let i = 0; i < kepzettsegek.length; i++) { + let kepzettseg = kepzettsegek[i] + page.drawText(kepzettseg.Name, { + x: 60, + y: startFrom - (i * 18), + size: fontSizeBase, + font: pdfFont, + color: rgb(0, 0, 0), + }) + const tulajdonsagErtek = kepzettseg.Tulajdonsag.reduce((maxTulajdonsagErtek, currentTulajdonsag) => + (tulajdonsagok[currentTulajdonsag] > maxTulajdonsagErtek) + ? tulajdonsagok[kepzettseg.Tulajdonsag[i]] : maxTulajdonsagErtek, - karakter.Tulajdonsagok[kepzettseg.Tulajdonsag[0]]) + tulajdonsagok[kepzettseg.Tulajdonsag[0]]) - const kepzettsegModifier = SignedNumberToText(Modifier(tulajdonsagErtek) + karakter.Szint) - page.drawText(kepzettsegModifier, { - x: kepzettsegModifier.length > 2 ? 172 : 175, - y: startFrom - (i * 18), - size: fontSizeBase, - font: pdfFont, - color: rgb(0, 0, 0), - }) - } + const kepzettsegModifier = SignedNumberToText(Modifier(tulajdonsagErtek) + szint) + page.drawText(kepzettsegModifier, { + x: kepzettsegModifier.length > 2 ? 172 : 175, + y: startFrom - (i * 18), + size: fontSizeBase, + font: pdfFont, + color: rgb(0, 0, 0), + }) + } +} + +export async function CreatePDF(karakter: Karakter) { + + const existingPdfBytes = await fetch('/km_karakterlap_hysteria_1.2.pdf').then(res => res.arrayBuffer()) + const pdfDoc = await PDFDocument.load(existingPdfBytes) + pdfDoc.registerFontkit(fontkit) + + const fontBytes = await fetch('/Merienda-Regular.ttf').then(res => res.arrayBuffer()) + const pdfFont = await pdfDoc.embedFont(fontBytes) + // const pdfFont = await pdfDoc.embedFont(StandardFonts.TimesNewRoman) + const fontSizeBase = 12 + + const page = pdfDoc.getPage(0) + + function drawText(text: string, x: number, y: number, fontScale = 1, shade = 0) { + page.drawText(text, { + x: x, + y: y, + size: fontSizeBase * fontScale, + font: pdfFont, + color: rgb(shade, shade, shade), + }) } - DrawKepzettsegek(karakter.Kepzettsegek, 337); + drawBaseInfo(karakter, drawText); + + 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.75, 0.75, 0.75), + }) + const kozelharciTB = SignedNumberToText(karakter.KozelharciTB()) + page.drawText(kozelharciTB, { + x: 258, + y: 382, + size: kozelharciTB.length > 2 ? (fontSizeBase * 1.5) : fontSizeBase * 2, + font: pdfFont, + color: rgb(0, 0, 0), + }) + const celzoTB = SignedNumberToText(karakter.CelzoTB()) + page.drawText(celzoTB, { + x: 347, + y: 382, + size: celzoTB.length > 2 ? (fontSizeBase * 1.5) : fontSizeBase * 2, + font: pdfFont, + color: rgb(0, 0, 0), + }) + + drawMentok(page, karakter, fontSizeBase, pdfFont); + + DrawKepzettsegek(page, fontSizeBase, pdfFont, karakter.Kepzettsegek, karakter.Tulajdonsagok, karakter.Szint, 337); const nextKepzettsegFrom = 337 - (karakter.Kepzettsegek.length * 18) - DrawKepzettsegek(karakter.TolvajKepzettsegek, nextKepzettsegFrom) + DrawKepzettsegek(page, fontSizeBase, pdfFont, karakter.TolvajKepzettsegek, karakter.Tulajdonsagok, karakter.Szint, nextKepzettsegFrom) const pdfBytes = await pdfDoc.save(); download(pdfBytes, karakter.Name + ".pdf", "application/pdf");