From 2f4cde091bbca3f5e350515ddf420330028fb468 Mon Sep 17 00:00:00 2001 From: Balint Morasz Date: Thu, 14 Sep 2023 22:19:21 +0200 Subject: [PATCH] level up to 2 almost working --- src/components/Level2.tsx | 39 ++++++-- src/components/MasodlagosErtekek.tsx | 21 ++-- src/domain-models/karakter.ts | 86 ++++++++-------- src/domain-models/masodlagos_ertekek.ts | 124 ------------------------ src/domain-models/mentok.ts | 30 ++++++ src/pages/CreateCharacter.tsx | 8 +- src/pdf/character.pdf.ts | 14 +-- 7 files changed, 123 insertions(+), 199 deletions(-) delete mode 100644 src/domain-models/masodlagos_ertekek.ts create mode 100644 src/domain-models/mentok.ts diff --git a/src/components/Level2.tsx b/src/components/Level2.tsx index 837808a..ecba087 100644 --- a/src/components/Level2.tsx +++ b/src/components/Level2.tsx @@ -1,6 +1,29 @@ import React from "react"; import {KarakterClass, KarakterInputs} from "../domain-models/karakter"; import {SignedNumberToText} from "./Helpers"; +import {Mentok, MentoTipus, MentoTipusLabel} from "../domain-models/mentok"; + +function MentoNovekedes(props : {tipus: MentoTipus, ujMentok: Mentok, regiMentok: Mentok}) { + const {tipus, ujMentok, regiMentok} = props + if (ujMentok[tipus] === regiMentok[tipus]) { + return null + } + return
+ + {SignedNumberToText(ujMentok[tipus] - regiMentok[tipus])} +
; +} + +function UjMento(props : {tipus: MentoTipus, ujMentok: Mentok, regiMentok: Mentok}) { + const {tipus, ujMentok, regiMentok} = props + if (ujMentok[tipus] === regiMentok[tipus]) { + return null + } + return
+ + {SignedNumberToText(ujMentok[tipus])} +
; +} function Level2(props: { karakter: KarakterInputs @@ -9,6 +32,8 @@ function Level2(props: { }) { const {karakter, rolledHP, changeRolledHP} = props const karakterClass = new KarakterClass(karakter) + const regiMentok = karakterClass.MentokTulajdonsaggal(karakter.szint - 1) + const ujMentok = karakterClass.MentokTulajdonsaggal(karakter.szint) return <>
@@ -33,10 +58,9 @@ function Level2(props: { +1
-
- - +1 -
+ + +
@@ -47,10 +71,9 @@ function Level2(props: { {karakterClass.TamadasBonusz().map(SignedNumberToText).join("/")}
-
- - {SignedNumberToText(karakterClass.KitartasMentoAlap())} -
+ + +
diff --git a/src/components/MasodlagosErtekek.tsx b/src/components/MasodlagosErtekek.tsx index 692f286..f43190e 100644 --- a/src/components/MasodlagosErtekek.tsx +++ b/src/components/MasodlagosErtekek.tsx @@ -1,18 +1,19 @@ import React from "react"; import {OverlayTrigger, Tooltip} from "react-bootstrap"; import {SignedNumberToText} from "./Helpers"; -import {KarakterMasodlagosErtekek} from "../domain-models/masodlagos_ertekek"; +import {Karakter} from "../domain-models/karakter"; -function MasodlagosErtekek(props: {ertekek: KarakterMasodlagosErtekek}) { +function MasodlagosErtekek(props: {karakter: Karakter}) { - const { ertekek } = props + const { karakter } = props const tooltip = ( Hentelési Potenciál ); + const mentok = karakter.MentokTulajdonsaggal(1) return <>
@@ -26,33 +27,33 @@ function MasodlagosErtekek(props: {ertekek: KarakterMasodlagosErtekek}) { (HP) -

{ertekek.HP}

+

{karakter.HP()}

-

{ertekek.VO}

+

{karakter.VO()}

-

{SignedNumberToText(ertekek.KozelHarciTB)}

+

{SignedNumberToText(karakter.KozelharciTB(1)[0])}

-

{SignedNumberToText(ertekek.CelzoTB)}

+

{SignedNumberToText(karakter.CelzoTB(1)[0])}

-

{SignedNumberToText(ertekek.KitartasMento)}

+

{SignedNumberToText(mentok.kitartas)}

-

{SignedNumberToText(ertekek.ReflexMento)}

+

{SignedNumberToText(mentok.reflex)}

-

{SignedNumberToText(ertekek.AkarateroMento)}

+

{SignedNumberToText(mentok.akaratero)}

diff --git a/src/domain-models/karakter.ts b/src/domain-models/karakter.ts index c1f7748..dfe72c6 100644 --- a/src/domain-models/karakter.ts +++ b/src/domain-models/karakter.ts @@ -1,9 +1,9 @@ import {Faj} from "./faj"; import {Osztaly} from "./osztaly"; import {KarakterTulajdonsagok, Modifier} from "./tulajdonsag"; -import {CalculateMasodlagosErtekek, KarakterMasodlagosErtekek} from "./masodlagos_ertekek"; import {Kepzettseg, Kepzettsegek, KepzettsegId} from "./kepzettsegek"; import TamadasBonuszTabla from './tamadas_bonus_tabla.json'; +import {ElsodlegesMento, MasodlagosMento, Mentok, MentoTipus} from "./mentok"; export interface Karakter { Name: string @@ -18,11 +18,11 @@ export interface Karakter { VO: () => number Mozgas: () => number Kezdemenyezes: () => number - KozelharciTB: () => number[] - CelzoTB: () => number[] - KitartasMentoAlap: () => number - ReflexMentoAlap: () => number - AkarateroMentoAlap: () => number + KozelharciTB: (szint?: number) => number[] + CelzoTB: (szint?: number) => number[] + ElsodlegesMentok: () => MentoTipus[] + MentokAlap: (szint?: number) => Mentok + MentokTulajdonsaggal: (szint?: number) => Mentok Kepzettsegek: Kepzettseg[] TolvajKepzettsegek: Kepzettseg[] } @@ -54,7 +54,6 @@ export class KarakterClass implements Karakter { public Kepzettsegek: Kepzettseg[] public TolvajKepzettsegek: Kepzettseg[] - private MasodlagosErtekek : KarakterMasodlagosErtekek private HProlls: number[] constructor(inputs: KarakterInputs) { @@ -65,7 +64,6 @@ export class KarakterClass implements Karakter { this.Faj = inputs.faj this.Osztaly = inputs.osztaly this.Tulajdonsagok = inputs.tulajdonsagok - this.MasodlagosErtekek = CalculateMasodlagosErtekek(inputs.osztaly, inputs.tulajdonsagok) this.Kepzettsegek = inputs.kepzettsegek.map(k => Kepzettsegek[k]) this.TolvajKepzettsegek = (inputs.tolvajKepzettsegek || []).map(k => Kepzettsegek[k]) this.Szint = Math.min(Math.max(1,inputs.szint), 20) @@ -77,7 +75,7 @@ export class KarakterClass implements Karakter { .map(hp => Math.max(1, hp + Modifier(this.Tulajdonsagok.t_egs))) .reduce((sum, val) => sum + val, 0) - public VO = () => this.MasodlagosErtekek.VO + public VO = () => 10 + Modifier(this.Tulajdonsagok.t_ugy) public Mozgas = () => this.Faj === Faj.Torpe ? 20 : 30 @@ -85,7 +83,7 @@ export class KarakterClass implements Karakter { return Modifier(this.Tulajdonsagok.t_ugy) + (this.Osztaly === Osztaly.Tolvaj ? 4 : 0) } - public TamadasBonusz() : number[] { + public TamadasBonusz(szint: number = this.Szint) : number[] { let base = [] switch (this.Osztaly){ case Osztaly.Barbar: @@ -104,70 +102,64 @@ export class KarakterClass implements Karakter { base = TamadasBonuszTabla['feles']; break; } - return base[this.Szint-1] + return base[szint-1] } - public KozelharciTB(): number[] { - const base = this.TamadasBonusz(); + public KozelharciTB(szint: number = this.Szint): number[] { + const base = this.TamadasBonusz(szint); let modifier = Modifier(this.Tulajdonsagok.t_ero) if (this.Osztaly === Osztaly.Kaloz && this.Tulajdonsagok.t_ugy > this.Tulajdonsagok.t_ero) { modifier = Modifier(this.Tulajdonsagok.t_ugy) } return base.map(v => v + modifier) } - public CelzoTB(): number[] { - let base = this.TamadasBonusz() + public CelzoTB(szint: number = this.Szint): number[] { + let base = this.TamadasBonusz(szint) if (this.Osztaly === Osztaly.Ijasz) { base = [base[0], ...base] } return base.map(v => v + Modifier(this.Tulajdonsagok.t_ugy)) } - public KitartasMentoAlap() : number { + public ElsodlegesMentok() : MentoTipus[] { + let t: MentoTipus[] = [] switch (this.Osztaly){ case Osztaly.Barbar: case Osztaly.Amazon: case Osztaly.Ijasz: case Osztaly.Kaloz: case Osztaly.Harcos: + t = ['kitartas']; + break; case Osztaly.Pap: - return 2; + t = ['kitartas', 'akaratero']; + break; case Osztaly.Tolvaj: + t = ['reflex']; + break; case Osztaly.Varazslo: case Osztaly.Illuzionista: - return 0; + t = ['akaratero'] + break; + } + return t + } + + public MentokAlap(szint: number = this.Szint) { + const elsodlegesek = this.ElsodlegesMentok() + return { + kitartas: elsodlegesek.includes('kitartas') ? ElsodlegesMento(szint) : MasodlagosMento(szint), + reflex: elsodlegesek.includes('reflex') ? ElsodlegesMento(szint) : MasodlagosMento(szint), + akaratero: elsodlegesek.includes('akaratero') ? ElsodlegesMento(szint) : MasodlagosMento(szint), } } - public ReflexMentoAlap() : number { - switch (this.Osztaly){ - case Osztaly.Tolvaj: - return 2; - case Osztaly.Barbar: - case Osztaly.Amazon: - case Osztaly.Ijasz: - case Osztaly.Kaloz: - case Osztaly.Harcos: - case Osztaly.Pap: - case Osztaly.Varazslo: - case Osztaly.Illuzionista: - return 0; - } - } - - public AkarateroMentoAlap() : number { - switch (this.Osztaly){ - case Osztaly.Pap: - case Osztaly.Varazslo: - case Osztaly.Illuzionista: - return 2; - case Osztaly.Tolvaj: - case Osztaly.Barbar: - case Osztaly.Amazon: - case Osztaly.Ijasz: - case Osztaly.Kaloz: - case Osztaly.Harcos: - return 0; + public MentokTulajdonsaggal(szint: number = this.Szint) { + const mentok = this.MentokAlap(szint) + return { + kitartas: mentok.kitartas + Modifier(this.Tulajdonsagok.t_egs), + reflex: mentok.reflex + Modifier(this.Tulajdonsagok.t_ugy), + akaratero: mentok.akaratero + Modifier(this.Tulajdonsagok.t_bol), } } diff --git a/src/domain-models/masodlagos_ertekek.ts b/src/domain-models/masodlagos_ertekek.ts deleted file mode 100644 index ff49c93..0000000 --- a/src/domain-models/masodlagos_ertekek.ts +++ /dev/null @@ -1,124 +0,0 @@ -import {Osztaly} from "./osztaly"; -import {KarakterTulajdonsagok, Modifier} from "./tulajdonsag"; - -export interface KarakterMasodlagosErtekek { - HP: number - VO: number - CelzoTB: number - KozelHarciTB: number - KitartasMento: number - ReflexMento: number - AkarateroMento: number -} - -export function CalculateMasodlagosErtekek(osztaly: Osztaly, tulajdonsagok: KarakterTulajdonsagok) : KarakterMasodlagosErtekek { - return { - HP: HP(osztaly, tulajdonsagok.t_egs), - VO: 10 + Modifier(tulajdonsagok.t_ugy), - KozelHarciTB: KozelharciTB(osztaly, tulajdonsagok), - CelzoTB: TamadasBonusz(osztaly) + Modifier(tulajdonsagok.t_ugy), - - KitartasMento: KitartasMento(osztaly) + Modifier(tulajdonsagok.t_egs), - ReflexMento: ReflexMento(osztaly) + Modifier(tulajdonsagok.t_ugy), - AkarateroMento: AkarateroMento(osztaly) + Modifier(tulajdonsagok.t_bol), - } -} - -function HP(osztaly: Osztaly, egeszseg: number) { - let base = 4; - switch (osztaly){ - case Osztaly.Barbar: - base = 12 - break; - case Osztaly.Amazon: - case Osztaly.Ijasz: - case Osztaly.Kaloz: - case Osztaly.Harcos: - base = 10; - break - case Osztaly.Pap: - base = 8; - break; - case Osztaly.Tolvaj: - base = 6; - break; - case Osztaly.Varazslo: - case Osztaly.Illuzionista: - base = 4; - break; - } - return base + Modifier(egeszseg) -} - -function TamadasBonusz(osztaly: Osztaly) : number { - switch (osztaly){ - case Osztaly.Barbar: - case Osztaly.Amazon: - case Osztaly.Ijasz: - case Osztaly.Kaloz: - case Osztaly.Harcos: - return 2; - case Osztaly.Pap: - case Osztaly.Tolvaj: - return 0; - case Osztaly.Varazslo: - case Osztaly.Illuzionista: - return 0; - } -} - -function KozelharciTB(osztaly: Osztaly, tulajdonsagok: KarakterTulajdonsagok): number { - const base = TamadasBonusz(osztaly); - if (osztaly === Osztaly.Kaloz && tulajdonsagok.t_ugy > tulajdonsagok.t_ero) { - return base + Modifier(tulajdonsagok.t_ugy) - } - return base + Modifier(tulajdonsagok.t_ero) -} - -function KitartasMento(osztaly: Osztaly) : number { - switch (osztaly){ - case Osztaly.Barbar: - case Osztaly.Amazon: - case Osztaly.Ijasz: - case Osztaly.Kaloz: - case Osztaly.Harcos: - case Osztaly.Pap: - return 2; - case Osztaly.Tolvaj: - case Osztaly.Varazslo: - case Osztaly.Illuzionista: - return 0; - } -} - -function ReflexMento(osztaly: Osztaly) : number { - switch (osztaly){ - case Osztaly.Tolvaj: - return 2; - case Osztaly.Barbar: - case Osztaly.Amazon: - case Osztaly.Ijasz: - case Osztaly.Kaloz: - case Osztaly.Harcos: - case Osztaly.Pap: - case Osztaly.Varazslo: - case Osztaly.Illuzionista: - return 0; - } -} - -function AkarateroMento(osztaly: Osztaly) : number { - switch (osztaly){ - case Osztaly.Pap: - case Osztaly.Varazslo: - case Osztaly.Illuzionista: - return 2; - case Osztaly.Tolvaj: - case Osztaly.Barbar: - case Osztaly.Amazon: - case Osztaly.Ijasz: - case Osztaly.Kaloz: - case Osztaly.Harcos: - return 0; - } -} diff --git a/src/domain-models/mentok.ts b/src/domain-models/mentok.ts new file mode 100644 index 0000000..180a0fe --- /dev/null +++ b/src/domain-models/mentok.ts @@ -0,0 +1,30 @@ +export interface Mentok { + kitartas: number + reflex: number + akaratero: number +} +export type MentoTipus = keyof Mentok + +export function MentoTipusLabel(tipus: MentoTipus): string { + let label: string | null = null + switch (tipus) { + case "akaratero": + label = "Akaraterő"; + break; + case "kitartas": + label = "Kitartás"; + break; + case "reflex": + label = "Reflex"; + break; + } + return label +} + +export function ElsodlegesMento(szint: number): number { + return Math.min(Math.floor(2 + szint / 2), 10); +} + +export function MasodlagosMento(szint: number): number { + return Math.floor(szint / 3) +} \ No newline at end of file diff --git a/src/pages/CreateCharacter.tsx b/src/pages/CreateCharacter.tsx index f5e3829..ad47cfa 100644 --- a/src/pages/CreateCharacter.tsx +++ b/src/pages/CreateCharacter.tsx @@ -9,7 +9,6 @@ import KarakterKepzettsegek from "../components/KarakterKepzettsegek"; import {KarakterTulajdonsagok, Modifier} from "../domain-models/tulajdonsag"; import MasodlagosErtekek from "../components/MasodlagosErtekek"; import {AvailableKezpettsegList, TolvajKepzettsegList} from "../domain-models/kepzettsegek"; -import {CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek"; import {CreatePDF} from "../pdf/character.pdf"; import {KarakterClass, KarakterInputs} from "../domain-models/karakter"; import Level2 from "../components/Level2"; @@ -52,6 +51,7 @@ function getNumberOfKepzettsegek(t_int: number, faj: Faj, max: number) { function CreateCharacterPage() { let [karakter, changeKarakter] = useState(karakterDefaults) + const karakterClass = new KarakterClass(karakter) const availableKepzettsegList = AvailableKezpettsegList(karakter.osztaly) @@ -64,7 +64,7 @@ function CreateCharacterPage() { } function levelUp() { - const dice = new KarakterClass(karakter).baseHP() + const dice = karakterClass.baseHP() const roll = getRandomInt(dice) console.log(`Level 2 HP roll on d${dice} is: ${roll}`) changeKarakter({...karakter, szint: karakter.szint + 1, HProlls: [...karakter.HProlls, roll]}) @@ -144,7 +144,7 @@ function CreateCharacterPage() { />
- + {karakter.szint > 1 && } @@ -154,7 +154,7 @@ function CreateCharacterPage() {
- +
diff --git a/src/pdf/character.pdf.ts b/src/pdf/character.pdf.ts index f8495fe..7f35288 100644 --- a/src/pdf/character.pdf.ts +++ b/src/pdf/character.pdf.ts @@ -96,21 +96,22 @@ function drawTulajdonsagok(page: PDFPage, tulajdonsagok: KarakterTulajdonsagok, } function drawMentok(page: PDFPage, karakter: Karakter, fontSizeBase: number, pdfFont: PDFFont) { - page.drawText(SignedNumberToText(karakter.KitartasMentoAlap()), { + 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(karakter.ReflexMentoAlap()), { + page.drawText(SignedNumberToText(mentokAlap.reflex), { x: 435, y: 580, size: fontSizeBase, font: pdfFont, color: rgb(0, 0, 0), }) - page.drawText(SignedNumberToText(karakter.AkarateroMentoAlap()), { + page.drawText(SignedNumberToText(mentokAlap.akaratero), { x: 435, y: 547, size: fontSizeBase, @@ -138,21 +139,22 @@ function drawMentok(page: PDFPage, karakter: Karakter, fontSizeBase: number, pdf font: pdfFont, color: rgb(0, 0, 0), }) - page.drawText(SignedNumberToText(karakter.KitartasMentoAlap() + Modifier(karakter.Tulajdonsagok.t_egs)), { + const mentok = karakter.MentokTulajdonsaggal() + page.drawText(SignedNumberToText(mentok.kitartas), { x: 515, y: 613, size: fontSizeBase, font: pdfFont, color: rgb(0, 0, 0), }) - page.drawText(SignedNumberToText(karakter.ReflexMentoAlap() + Modifier(karakter.Tulajdonsagok.t_ugy)), { + page.drawText(SignedNumberToText(mentok.reflex), { x: 515, y: 580, size: fontSizeBase, font: pdfFont, color: rgb(0, 0, 0), }) - page.drawText(SignedNumberToText(karakter.AkarateroMentoAlap() + Modifier(karakter.Tulajdonsagok.t_bol)), { + page.drawText(SignedNumberToText(mentok.akaratero), { x: 515, y: 547, size: fontSizeBase,