diff --git a/TODO.md b/TODO.md index c383ab8..9559c6d 100644 --- a/TODO.md +++ b/TODO.md @@ -1,10 +1,10 @@ # TODO ## Fixes -- Kötelező képezettségek -- Jellem +- Kötelező képezettségek - Birodalmi tolvaj ## Level up +- Faji szint korlatok - Harcos fegyver specializáció választás szintlépéskor (free text) - Kalóz kritikus fegyver választás szintlépéskor (free text) - Tolvaj 9.ik szinttől tiltott képzettségek diff --git a/src/components/JellemSelector.tsx b/src/components/JellemSelector.tsx new file mode 100644 index 0000000..99967ee --- /dev/null +++ b/src/components/JellemSelector.tsx @@ -0,0 +1,27 @@ +import React from "react"; +import {AllJellemIDs, GetJellem, JellemID} from "../domain-models/jellem"; + +function JellemSelector(props: {selected: JellemID, changeJellem: (val: JellemID) => void}) { + const { selected, changeJellem } = props + const jellem = GetJellem(selected) + return <> +
+ + +
+
+ +
+

+ {jellem.Description} +

+
+
+ +} + +export default JellemSelector \ No newline at end of file diff --git a/src/components/KarakterKepzettsegek.tsx b/src/components/KarakterKepzettsegek.tsx index 1132f9b..3dabfd5 100644 --- a/src/components/KarakterKepzettsegek.tsx +++ b/src/components/KarakterKepzettsegek.tsx @@ -55,27 +55,22 @@ function InternalKepzettsegekSelector(props: { } function KarakterKepzettsegek (props: { - availableKepzettsegList: Kepzettseg[], numberOfKepzettsegek: number kepzettsegek: KepzettsegId[], changeKepzettsegek: (newKepzettsegek: KepzettsegId[]) => void tolvajKepzettsegek: KepzettsegId[], changeTolvajKepzettsegek: (newKepzettsegek: KepzettsegId[]) => void + getKepzettsegListaN: (n: number) => Kepzettseg[] }) { - const { kepzettsegek, numberOfKepzettsegek, availableKepzettsegList, changeKepzettsegek, tolvajKepzettsegek, changeTolvajKepzettsegek} = props + const { kepzettsegek, numberOfKepzettsegek, getKepzettsegListaN, changeKepzettsegek, tolvajKepzettsegek, changeTolvajKepzettsegek} = props // TODO: Eszakinak es Kaloznak hajozas, Birodalminak Alikmia, vagy Meregkeveres, Etuniainak Lovaglas - const getKepzettsegListaN = (n: number) => { - const kepzettsegekWithoutN = [...kepzettsegek.slice(0, n), ...kepzettsegek.slice(n+1)] - return availableKepzettsegList.filter(x => !kepzettsegekWithoutN.includes(x.Id) && !tolvajKepzettsegek.includes(x.Id)) - } - const getTolvajKepzettsegListaN = (n: number) : Kepzettseg[] => { const tolvajKepzettsegekWithoutN = [...tolvajKepzettsegek.slice(0, n), ...tolvajKepzettsegek.slice(n+1)] return TolvajKepzettsegList.filter(x => !kepzettsegek.includes(x.Id) && !tolvajKepzettsegekWithoutN.includes(x.Id)) } - + return <> ) { + const availableKepzettsegList = AvailableKezpettsegList(karakter.osztaly) + return (n: number): Kepzettseg[] => { + let available = [...availableKepzettsegList] + if (n === 0) { + if (karakter.faj === Faj.Eszaki) { + return [Kepzettsegek.k_hajozas] + } + if (karakter.faj === Faj.Etuniai) { + return [Kepzettsegek.k_lovaglas] + } + if (karakter.faj === Faj.Birodalmi && karakter.osztaly !== Osztaly.Tolvaj) { + available = [Kepzettsegek.k_meregkeveres, Kepzettsegek.k_alkimia] + } + } + const kepzettsegekWithoutN = [...karakter.kepzettsegek.slice(0, n), ...karakter.kepzettsegek.slice(n + 1)] + return available.filter(x => !kepzettsegekWithoutN.includes(x.Id) && !karakter.tolvajKepzettsegek?.includes(x.Id)) + } +} + export function SetDefaultKepzettsegek(karakter: Pick, changeKepzettsegek: (k: KepzettsegId[]) => void) { const availableKepzettsegList = AvailableKezpettsegList(karakter.osztaly) const numberOfKepzettsegek = GetNumberOfKepzettsegek(karakter.tulajdonsagok.t_int, karakter.faj, availableKepzettsegList.length) - let kepzettsegek = karakter.kepzettsegek - const getKepzettsegListaN = (n: number) => { - const kepzettsegekWithoutN = [...kepzettsegek.slice(0, n), ...kepzettsegek.slice(n+1)] - return availableKepzettsegList.filter(x => !kepzettsegekWithoutN.includes(x.Id) && !karakter.tolvajKepzettsegek?.includes(x.Id)) + let kepzettsegek = [...karakter.kepzettsegek] + + let mustChangeKepzettsegek = false + + const restrictedKepzettsegek = GetKepzettsegListaN(karakter)(0) + if (kepzettsegek.length === 0) { + if (restrictedKepzettsegek.length > 0) { + kepzettsegek.push(restrictedKepzettsegek[0].Id) + mustChangeKepzettsegek = true + } + } else { + if (!restrictedKepzettsegek.includes(Kepzettsegek[kepzettsegek[0]])) { + kepzettsegek[0] = restrictedKepzettsegek[0].Id + mustChangeKepzettsegek = true + } } + if (kepzettsegek.length < numberOfKepzettsegek) { for (let i = kepzettsegek.length; i < numberOfKepzettsegek; i++) { - const kepzettsegLista = getKepzettsegListaN(i) + const kepzettsegLista = GetKepzettsegListaN({...karakter, kepzettsegek})(i) if (kepzettsegLista.length > 0) { kepzettsegek.push(kepzettsegLista[0].Id) } } - changeKepzettsegek(kepzettsegek) + mustChangeKepzettsegek = true } if (kepzettsegek.length > numberOfKepzettsegek){ kepzettsegek = kepzettsegek.slice(0, numberOfKepzettsegek) + mustChangeKepzettsegek = true + } + if (mustChangeKepzettsegek){ changeKepzettsegek(kepzettsegek) } } \ No newline at end of file diff --git a/src/pages/CreateCharacter.tsx b/src/pages/CreateCharacter.tsx index ea0260e..a63d8f5 100644 --- a/src/pages/CreateCharacter.tsx +++ b/src/pages/CreateCharacter.tsx @@ -15,7 +15,7 @@ import { } from "../domain-models/tulajdonsag"; import MasodlagosErtekek from "../components/MasodlagosErtekek"; import { - AvailableKezpettsegList, + AvailableKezpettsegList, GetKepzettsegListaN, GetNumberOfKepzettsegek, KepzettsegId, SetDefaultKepzettsegek, SetDefaultTolvajKepzettsegek, } from "../domain-models/kepzettsegek"; @@ -27,6 +27,7 @@ import {BaseHP, CalculateMasodlagosErtekek} from "../domain-models/masodlagos_er import {KarakterInputToPdfView} from "../pdf/karakter_pdf_view"; import {arraySetN} from "../util"; import TulajdonsagNoveles from "../components/TulajdonsagNoveles"; +import JellemSelector from "../components/JellemSelector"; function CreateCharacterPage() { @@ -104,6 +105,7 @@ function CreateCharacterPage() { type={"number"} onChange={(e) => changeKarakter({...karakter, kor: Number(e.target.value)})}/> + changeKarakter({...karakter, jellem: val})} />
changeKarakter({...karakter, osztaly: o})} /> 17 ? 11/12 : 1) } -function DrawKepzettsegek(page: PDFPage, fontSizeBase: number, pdfFont: PDFFont, kepzettsegek: Kepzettseg[], tulajdonsagok: KarakterTulajdonsagok, szint: number, startFrom: number) { +function DrawKepzettsegek(draw: (text: string, x: number, y: number) => void, 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), - }) + draw(kepzettseg.Name, 60, startFrom - (i * 18)) const tulajdonsagErtek = kepzettseg.Tulajdonsag.reduce((maxTulajdonsagErtek, currentTulajdonsag) => (tulajdonsagok[currentTulajdonsag] > maxTulajdonsagErtek) ? tulajdonsagok[kepzettseg.Tulajdonsag[i]] @@ -190,13 +183,7 @@ function DrawKepzettsegek(page: PDFPage, fontSizeBase: number, pdfFont: PDFFont, tulajdonsagok[kepzettseg.Tulajdonsag[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), - }) + draw(kepzettsegModifier, kepzettsegModifier.length > 2 ? 172 : 175, startFrom - (i * 18)) } } @@ -303,9 +290,9 @@ export async function CreatePDF(karakter: KarakterPdfView) { drawMentok(page, karakter, fontSizeBase, pdfFont); - DrawKepzettsegek(page, fontSizeBase, pdfFont, karakter.Kepzettsegek, karakter.Tulajdonsagok, karakter.Szint, 337); + DrawKepzettsegek(drawText, karakter.Kepzettsegek, karakter.Tulajdonsagok, karakter.Szint, 337); const nextKepzettsegFrom = 337 - (karakter.Kepzettsegek.length * 18) - DrawKepzettsegek(page, fontSizeBase, pdfFont, karakter.TolvajKepzettsegek, karakter.Tulajdonsagok, karakter.Szint, nextKepzettsegFrom) + DrawKepzettsegek(drawText, karakter.TolvajKepzettsegek, karakter.Tulajdonsagok, karakter.Szint, nextKepzettsegFrom) DrawMagic(page, fontSizeBase, pdfFont, karakter.NapiMemorizalhatoVarazslatok, karakter.VarazslatMentokNF) diff --git a/src/pdf/karakter_pdf_view.ts b/src/pdf/karakter_pdf_view.ts index e446204..7320f73 100644 --- a/src/pdf/karakter_pdf_view.ts +++ b/src/pdf/karakter_pdf_view.ts @@ -6,19 +6,21 @@ import { import {Mentok, MentokAlap, MentoModositok} from "../domain-models/mentok"; import {Kepzettseg, Kepzettsegek} from "../domain-models/kepzettsegek"; import {CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek"; -import {Faj} from "../domain-models/faj"; -import {Osztaly} from "../domain-models/osztaly"; +import {Faj, FajLabel} from "../domain-models/faj"; +import {Osztaly, OsztalyLabel} from "../domain-models/osztaly"; 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"; export interface KarakterPdfView { Name: string Nem: string Kor: number Isten: string - Faj: Faj - Osztaly: Osztaly + Jellem: string + Faj: string + Osztaly: string Tulajdonsagok: KarakterTulajdonsagok, TulajdonsagModositok: KarakterTulajdonsagok, Szint: number @@ -52,13 +54,14 @@ export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfVie const VarazslatMentokNF = CalculateVarazslatMentokNF(karakter) return { - Faj: karakter.faj, + Faj: FajLabel(karakter.faj), Isten: karakter.isten || "", + Jellem: GetJellem(karakter.jellem).Label, Kor: karakter.kor, Name: karakter.name, Nem: karakter.nem || "", Tulajdonsagok: karakter.tulajdonsagok, - Osztaly: karakter.osztaly, + Osztaly: OsztalyLabel(karakter.osztaly), Szint: karakter.szint, Kepzettsegek: karakter.kepzettsegek.map(id => Kepzettsegek[id]), TolvajKepzettsegek: karakter.tolvajKepzettsegek?.map(id => Kepzettsegek[id]) || [],