From 4d58cc2b6a09b8e831984bb2c2602297a06dc2bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?B=C3=A1lint=20M=C3=B3r=C3=A1sz?= Date: Tue, 10 Oct 2023 20:13:07 +0000 Subject: [PATCH] add pancel and pajzs VO to pdf --- src/components/Felszereles.tsx | 14 ++++++----- src/domain-models/felszereles.ts | 32 ++++++++++++++++++++++--- src/domain-models/masodlagos_ertekek.ts | 18 ++++++++++---- src/domain-models/osztaly.ts | 28 ++++++++++++++++++++++ src/domain-models/pancel.json | 10 +++----- src/pages/CreateCharacter.tsx | 7 ++++-- src/pdf/character.pdf.ts | 15 ++++++++++++ src/pdf/karakter_pdf_view.ts | 10 ++++++++ 8 files changed, 112 insertions(+), 22 deletions(-) diff --git a/src/components/Felszereles.tsx b/src/components/Felszereles.tsx index 80ec2e1..c004f52 100644 --- a/src/components/Felszereles.tsx +++ b/src/components/Felszereles.tsx @@ -1,19 +1,21 @@ import React from "react"; import { KarakterFelszereles, PancelTypes, PancelTypeLabel } from "../domain-models/felszereles"; +import { Osztaly, OsztalyAllowedPancelTypes } from '../domain-models/osztaly' import pancelok from '../domain-models/pancel.json' import pajzsok from '../domain-models/pajzs.json' -function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles: (felszereles: KarakterFelszereles) => void}) { - const { felszereles, changeFelszereles } = props; +function Felszereles(props: {felszereles: KarakterFelszereles, changeFelszereles: (felszereles: KarakterFelszereles) => void, osztaly: Osztaly}) { + const { felszereles, changeFelszereles, osztaly } = props; + const allowedPancelTypes = OsztalyAllowedPancelTypes(osztaly) return <>
changeFelszereles({...felszereles, pajzsID: e.target.value === 'nincs' ? undefined : e.target.value})}> - {pajzsok['pajzs'].map(p => )} + {allowedPancelTypes.length > 0 && (pajzsok['pajzs'].map(p => ))}
diff --git a/src/domain-models/felszereles.ts b/src/domain-models/felszereles.ts index d98d90f..960217c 100644 --- a/src/domain-models/felszereles.ts +++ b/src/domain-models/felszereles.ts @@ -1,13 +1,14 @@ -import pancel from "./pancel.json" +import pancelok from './pancel.json' +import pajzsok from './pajzs.json' -export type PancelType = keyof typeof pancel +export type PancelType = 'konnyu' | 'kozepes' | 'nehez' export const PancelTypes: PancelType[] = ['konnyu', 'kozepes', 'nehez'] export interface Pancel { ID: string, Name: string, - Type: 'konnyu' | 'kozepes' | 'nehez' + Type: PancelType VO: number, Price: number, } @@ -55,4 +56,29 @@ export function PancelTypeLabel(type: PancelType): string { result = 'Egyéb páncél' } return result +} + +export function GetPancel(id?: string): Pancel | undefined { + if (id == null) { + return undefined + } + const filteredPancel = pancelok['pancel'].filter(p => p.ID === id) as Pancel[] + return filteredPancel.length > 0 ? filteredPancel[0] : undefined +} + +export function MaxAbilityVO(p: PancelType) { + switch(p){ + case 'konnyu': return 3; + case 'kozepes': return 2; + case 'nehez': return 1; + default: return 9999; + } +} + +export function GetPajzs(id?: string): Pajzs | undefined { + if (id == null) { + return undefined + } + const filtered = pajzsok['pajzs'].filter(p => p.ID === id) as Pajzs[] + return filtered.length > 0 ? filtered[0] : undefined } \ No newline at end of file diff --git a/src/domain-models/masodlagos_ertekek.ts b/src/domain-models/masodlagos_ertekek.ts index 819b566..d4e6455 100644 --- a/src/domain-models/masodlagos_ertekek.ts +++ b/src/domain-models/masodlagos_ertekek.ts @@ -4,6 +4,7 @@ import {KarakterInputs} from "./karakter"; import {Modifier} from "./tulajdonsag"; import {CelzoTB, KozelharciTB} from "./tamadas_bonusz"; import {Faj} from "./faj"; +import { GetPajzs, GetPancel, MaxAbilityVO } from "./felszereles"; export interface MasodlagosErtekekView { HP: number @@ -13,7 +14,7 @@ export interface MasodlagosErtekekView { Mentok: Mentok } -export type KarakterpickForMasodlagosErtekek = Pick +export type KarakterpickForMasodlagosErtekek = Pick export function BaseHP(osztaly: Osztaly) { let base = 4; @@ -49,20 +50,29 @@ export function HP(karakter: Pick sum + val, 0) } -export function VO(karakter: Pick): number { - let vo = 10 + Modifier(karakter.tulajdonsagok.t_ugy) +export function VO(karakter: Pick): number { + const pancel = GetPancel(karakter.felszereles.pancelID) + const pancelVO = pancel?.VO ?? 0 + const pajzsVO = GetPajzs(karakter.felszereles.pajzsID)?.VO ?? 0 + let vo = 10 + pajzsVO + pancelVO + let abilityVO = Modifier(karakter.tulajdonsagok.t_ugy) if (karakter.osztaly === Osztaly.Kaloz) { vo += Math.floor(karakter.szint / 3) } if (karakter.osztaly === Osztaly.Amazon) { if (karakter.tulajdonsagok.t_kar > karakter.tulajdonsagok.t_ugy) { - vo = 10 + Modifier(karakter.tulajdonsagok.t_kar) + abilityVO = Modifier(karakter.tulajdonsagok.t_kar) } vo += Math.floor(karakter.szint / 2) } if (karakter.faj === Faj.Felszerzet){ vo += 1 } + if (pancel) { + abilityVO = Math.min(MaxAbilityVO(pancel.Type), abilityVO) + } + vo += abilityVO + return vo } diff --git a/src/domain-models/osztaly.ts b/src/domain-models/osztaly.ts index e32634e..4b9ce15 100644 --- a/src/domain-models/osztaly.ts +++ b/src/domain-models/osztaly.ts @@ -1,3 +1,6 @@ +import { GetPancel, KarakterFelszereles, Pancel, PancelType } from "./felszereles"; +import pancelok from './pancel.json' + export enum Osztaly { Harcos = 'o_harcos', Ijasz = 'o_ijasz', @@ -10,6 +13,31 @@ export enum Osztaly { Illuzionista = 'o_illuzionista', } +export function OsztalyAllowedPancelTypes(o: Osztaly): PancelType[] { + switch (o) { + case Osztaly.Amazon: return ['konnyu']; + case Osztaly.Barbar: return ['konnyu', 'kozepes', 'nehez']; + case Osztaly.Pap: return ['konnyu', 'kozepes', 'nehez']; + case Osztaly.Illuzionista: return []; + case Osztaly.Varazslo: return []; + case Osztaly.Harcos: return ['konnyu', 'kozepes', 'nehez']; + case Osztaly.Ijasz: return ['konnyu', 'kozepes']; + case Osztaly.Kaloz: return ['konnyu', 'kozepes']; + case Osztaly.Tolvaj: return ['konnyu'] + } +} + +export function SetFelszerelesForChangedOsztaly(o: Osztaly, felszereles: KarakterFelszereles, changeFelszereles: (f: KarakterFelszereles) => void) { + const allowedPancelTypes = OsztalyAllowedPancelTypes(o) + const pancel = GetPancel(felszereles.pancelID) + if (pancel && !allowedPancelTypes.includes(pancel.Type)) { + changeFelszereles({...felszereles, pancelID: undefined}) + } + if (allowedPancelTypes.length === 0 && !!felszereles.pajzsID){ + changeFelszereles({...felszereles, pajzsID: undefined}) + } +} + export function OsztalyLabel(osztaly: Osztaly) : string { switch (osztaly) { case Osztaly.Amazon: return 'Amazon'; diff --git a/src/domain-models/pancel.json b/src/domain-models/pancel.json index c79e195..4013181 100644 --- a/src/domain-models/pancel.json +++ b/src/domain-models/pancel.json @@ -1,5 +1,5 @@ { - "konnyu": [ + "pancel": [ { "ID": "tomott", "Name": "Tömött", @@ -34,9 +34,7 @@ "Type": "konnyu", "VO": 4, "Price": 50 - } - ], - "kozepes": [ + }, { "ID": "pikkelyvert", "Name": "Pikkelyvért", @@ -57,9 +55,7 @@ "Type": "kozepes", "VO": 5, "Price": 100 - } - ], - "nehez": [ + }, { "ID": "racsvert", "Name": "Rácsvért", diff --git a/src/pages/CreateCharacter.tsx b/src/pages/CreateCharacter.tsx index 31512eb..75e9f57 100644 --- a/src/pages/CreateCharacter.tsx +++ b/src/pages/CreateCharacter.tsx @@ -1,7 +1,7 @@ import React, {useState} from 'react'; import './CreateCharacter.css' import {Faj} from "../domain-models/faj"; -import {Osztaly} from "../domain-models/osztaly" +import {Osztaly, SetFelszerelesForChangedOsztaly} from "../domain-models/osztaly" import FajSelector from "../components/FajSelector"; import Tulajdonsagok from "../components/Tulajdonsagok"; import OsztalySelector from "../components/OsztalySelector"; @@ -26,6 +26,7 @@ import {Card} from "react-bootstrap"; import LevelUps from "../components/LevelUps"; import HarcosFegyverSpecializacio from "../components/HarcosFegyverSpecializacio"; import Felszereles from '../components/Felszereles'; +import { KarakterFelszereles } from '../domain-models/felszereles'; function CreateCharacterPage() { @@ -38,6 +39,8 @@ function CreateCharacterPage() { SetDefaultTolvajKepzettsegek(karakter, changeTolvajKepzettseg) SetDefaultKepzettsegek({...karakter, tulajdonsagok: tulajdonsagokFajjal}, changeKepzettseg) const availableKepzettsegList = AvailableKezpettsegList(karakter.osztaly) + const setFelszereles = (f: KarakterFelszereles) => changeKarakter({...karakter, felszereles: f}) + SetFelszerelesForChangedOsztaly(karakter.osztaly, karakter.felszereles, setFelszereles) const levelUp = () => LevelUp(karakter, changeKarakter) const levelDown = () => LevelDown(karakter, changeKarakter) @@ -128,7 +131,7 @@ function CreateCharacterPage() {
- changeKarakter({...karakter, felszereles: f})} /> +
diff --git a/src/pdf/character.pdf.ts b/src/pdf/character.pdf.ts index 8e5c7c8..b91b005 100644 --- a/src/pdf/character.pdf.ts +++ b/src/pdf/character.pdf.ts @@ -315,6 +315,21 @@ export async function CreatePDF(karakter: KarakterPdfView) { DrawMagic(page, fontSizeBase, pdfFont, karakter.NapiMemorizalhatoVarazslatok, karakter.VarazslatMentokNF) + 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 secondPage = pdfDoc.addPage() DrawSecondPage(secondPage, pdfFont, karakter) diff --git a/src/pdf/karakter_pdf_view.ts b/src/pdf/karakter_pdf_view.ts index fab53ed..752dc47 100644 --- a/src/pdf/karakter_pdf_view.ts +++ b/src/pdf/karakter_pdf_view.ts @@ -16,6 +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' export interface KepzettsegPdfView { KepzettsegName: string @@ -47,6 +48,9 @@ export interface KarakterPdfView { TolvajKepzettsegek: KepzettsegPdfView[] NapiMemorizalhatoVarazslatok: number[] VarazslatMentokNF : number[] + Felszereles: string[] + PancelVO: number + PajzsVO: number } export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfView { @@ -63,6 +67,9 @@ export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfVie const NapiMemorizalhatoVarazslatok = NapiVarazslatok(karakter) const VarazslatMentokNF = CalculateVarazslatMentokNF(karakter) + const pancel = GetPancel(karakter.felszereles.pancelID) + const pajzs = GetPajzs(karakter.felszereles.pajzsID) + return { Faj: FajLabel(karakter.faj), Isten: karakter.isten || "", @@ -91,6 +98,9 @@ export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfVie NapiMemorizalhatoVarazslatok, VarazslatMentokNF, + Felszereles: [pajzs?.Name, pancel?.Name].filter(x => !!x) as string[], + PajzsVO: pajzs?.VO ?? 0, + PancelVO: pancel?.VO ?? 0, } }