From dbd77a9fcffdcb275cd7477e747fd951ded217fd Mon Sep 17 00:00:00 2001 From: Balint Morasz Date: Thu, 5 Oct 2023 21:04:42 +0200 Subject: [PATCH] add harcos fegyver specializacio --- TODO.md | 3 +- src/components/BasicNewLevel.tsx | 5 +- src/components/HarcosFegyverSpecializacio.tsx | 17 +++++ src/components/KarakterKepzettsegek.tsx | 8 +-- src/components/LevelUps.tsx | 68 +++++++++++++++++++ src/components/TulajdonsagNoveles.tsx | 11 ++- src/domain-models/karakter.ts | 6 +- src/domain-models/level.ts | 13 +++- src/pages/CreateCharacter.tsx | 56 ++++++--------- 9 files changed, 134 insertions(+), 53 deletions(-) create mode 100644 src/components/HarcosFegyverSpecializacio.tsx create mode 100644 src/components/LevelUps.tsx diff --git a/TODO.md b/TODO.md index abf38ab..ce32521 100644 --- a/TODO.md +++ b/TODO.md @@ -5,10 +5,9 @@ - PDF pretty: Tamadas bonuszok +10/+5 ## 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 +- multiclass characters ## PDF - specialis kepessegek 2ik oldalra nyomtatasa diff --git a/src/components/BasicNewLevel.tsx b/src/components/BasicNewLevel.tsx index 49cdf47..9032b43 100644 --- a/src/components/BasicNewLevel.tsx +++ b/src/components/BasicNewLevel.tsx @@ -28,7 +28,7 @@ function UjMento(props : {tipus: MentoTipus, ujMentok: Mentok, regiMentok: Mento } function BasicNewLevel(props: { - karakter: KarakterInputs + karakter: Pick szint: number changeRolledHP: (hp: number) => void, }) { @@ -45,9 +45,6 @@ function BasicNewLevel(props: { const isTBincreased = TBdiff.length > 0 && TBdiff.some(x => x > 0) return <> -
-
{szint}. Szint
-
diff --git a/src/components/HarcosFegyverSpecializacio.tsx b/src/components/HarcosFegyverSpecializacio.tsx new file mode 100644 index 0000000..4e929ac --- /dev/null +++ b/src/components/HarcosFegyverSpecializacio.tsx @@ -0,0 +1,17 @@ +import React from "react"; + +function HarcosFegyverSpecializacio(props: {specialization: string, existingSpecializations: string[], changeSpecialization: (specialization: string) => void }) { + const {specialization, existingSpecializations, changeSpecialization} = props + const hasError = existingSpecializations.filter(x => x === specialization).length > 1 + return <> +
+ + changeSpecialization(e.target.value)}/> + {hasError && Már választottad ezt a specializaciót!} +
+ +} + +export default HarcosFegyverSpecializacio \ No newline at end of file diff --git a/src/components/KarakterKepzettsegek.tsx b/src/components/KarakterKepzettsegek.tsx index 3dabfd5..9ad0471 100644 --- a/src/components/KarakterKepzettsegek.tsx +++ b/src/components/KarakterKepzettsegek.tsx @@ -35,10 +35,8 @@ function InternalKepzettsegekSelector(props: { } return <> -
-
- -
+
+
{klist.map((idx) => { const tolvajKepzettsegekWithoutN = [...tolvajKepzettsegek.slice(0, n), ...tolvajKepzettsegek.slice(n+1)] diff --git a/src/components/LevelUps.tsx b/src/components/LevelUps.tsx new file mode 100644 index 0000000..2fb38b4 --- /dev/null +++ b/src/components/LevelUps.tsx @@ -0,0 +1,68 @@ +import React from "react"; +import {KarakterInputs} from "../domain-models/karakter"; +import BasicNewLevel from "./BasicNewLevel"; +import TulajdonsagNoveles from "./TulajdonsagNoveles"; +import {Tulajdonsag, TulajdonsagokTotal} from "../domain-models/tulajdonsag"; +import {arraySetN} from "../util"; +import {Osztaly} from "../domain-models/osztaly"; +import HarcosFegyverSpecializacio from "./HarcosFegyverSpecializacio"; + +function LevelUp(props: {szint: number, karakter: KarakterInputs, changeTulajdonsagNoveles: (t: Tulajdonsag) => void, changeRolledHP: (rolledHP: number) => void, changeHarcosSpec: (spec: string) => void}) { + const {szint, karakter, changeTulajdonsagNoveles, changeRolledHP, changeHarcosSpec} = props + + const specializationIndex = Math.floor((szint-1) / 2) + console.log('Specialization index: ' + specializationIndex.toString()) + const specialization = karakter.harcosSpecializaciok[specializationIndex] + console.log(specialization) + + return
+
+
{szint}. Szint
+
+ {szint % 4 === 0 && } + + {karakter.osztaly === Osztaly.Harcos && szint % 2 === 1 && + } +
+} + +export function LevelUps(props: {karakter: KarakterInputs, changeKarakter: (inputs: KarakterInputs) => void}){ + const {karakter, changeKarakter} = props; + + const tulajdonsagokAtSzint = (szint: number) => TulajdonsagokTotal({...karakter, tulajdonsagNovelesek: karakter.tulajdonsagNovelesek.slice(0, Math.floor(szint / 4))}) + + const changeRolledHPAtSzint = (szint: number) => (newHProll: number) => { + changeKarakter({...karakter, hpRolls: arraySetN(karakter.hpRolls, szint-2, newHProll)}) + console.log(karakter) + } + const changeTulajdonsagNovelesAtSzint = (szint: number) => (t: Tulajdonsag) => { changeKarakter({...karakter, tulajdonsagNovelesek: arraySetN(karakter.tulajdonsagNovelesek, Math.floor((szint / 4)-1), t)}) } + + const changeHarcosSpecializacioAtSzint = (szint: number) => (spec: string) => { + changeKarakter({...karakter, harcosSpecializaciok: arraySetN(karakter.harcosSpecializaciok, Math.floor((szint-1) / 2), spec)}) + } + + return <> + {karakter.hpRolls.map((_, i) => i+2).map(szint => <> + + + )} + +} + +export default LevelUps \ No newline at end of file diff --git a/src/components/TulajdonsagNoveles.tsx b/src/components/TulajdonsagNoveles.tsx index 0434cba..101a1dc 100644 --- a/src/components/TulajdonsagNoveles.tsx +++ b/src/components/TulajdonsagNoveles.tsx @@ -1,5 +1,12 @@ import React from "react"; -import {KarakterTulajdonsagok, Tulajdonsag, TulajdonsagIDs, TulajdonsagLabel} from "../domain-models/tulajdonsag"; +import { + KarakterTulajdonsagok, + Modifier, + Tulajdonsag, + TulajdonsagIDs, + TulajdonsagLabel +} from "../domain-models/tulajdonsag"; +import {SignedNumberToText} from "./Helpers"; function TulajdonsagNoveles(props: {tulajdonsagok: KarakterTulajdonsagok, szint: number, tulajdonsagNovelesek: Tulajdonsag[], changeTulajdonsagNoveles: (tulajdonsag: Tulajdonsag) => void}) { const {tulajdonsagok, szint, tulajdonsagNovelesek, changeTulajdonsagNoveles} = props @@ -21,7 +28,7 @@ function TulajdonsagNoveles(props: {tulajdonsagok: KarakterTulajdonsagok, szint:
- {tulajdonsagok[tulajdonsagNoveles]} + {tulajdonsagok[tulajdonsagNoveles]} ({SignedNumberToText(Modifier(tulajdonsagok[tulajdonsagNoveles]))})
diff --git a/src/domain-models/karakter.ts b/src/domain-models/karakter.ts index 688f91d..1c51d47 100644 --- a/src/domain-models/karakter.ts +++ b/src/domain-models/karakter.ts @@ -18,6 +18,8 @@ export interface KarakterInputs { szint: number hpRolls: number[], tulajdonsagNovelesek: Tulajdonsag[], + harcosSpecializaciok: string[], + kalozKritikus: string[], } export const KarakterDefaults: KarakterInputs = { @@ -30,5 +32,7 @@ export const KarakterDefaults: KarakterInputs = { kepzettsegek: [], szint: 1, hpRolls: [], - tulajdonsagNovelesek: [] + tulajdonsagNovelesek: [], + harcosSpecializaciok: ['szablya'], + kalozKritikus: [], } diff --git a/src/domain-models/level.ts b/src/domain-models/level.ts index 3cad41a..4689c93 100644 --- a/src/domain-models/level.ts +++ b/src/domain-models/level.ts @@ -3,6 +3,7 @@ import {dAny} from "./kockak"; import {TulajdonsagIDs, TulajdonsagokTotal} from "./tulajdonsag"; import {KarakterInputs} from "./karakter"; import {GetFajDetails} from "./faj"; +import {Osztaly} from "./osztaly"; export function LevelUp(karakter: KarakterInputs, changeKarakter: (input: KarakterInputs) => void) { @@ -21,7 +22,11 @@ export function LevelUp(karakter: KarakterInputs, changeKarakter: (input: Karakt } } } - changeKarakter({...karakter, szint, hpRolls, tulajdonsagNovelesek}) + let harcosSpecializaciok = karakter.harcosSpecializaciok + if(karakter.osztaly === Osztaly.Harcos && szint % 2 === 1) { + harcosSpecializaciok = [...harcosSpecializaciok, "szablya"] + } + changeKarakter({...karakter, szint, hpRolls, tulajdonsagNovelesek, harcosSpecializaciok}) } export function LevelDown(karakter: KarakterInputs, changeKarakter: (input: KarakterInputs) => void) { @@ -31,7 +36,11 @@ export function LevelDown(karakter: KarakterInputs, changeKarakter: (input: Kara } const szint = karakter.szint - 1 const hpRolls = karakter.hpRolls.slice(0, -1) - changeKarakter({...karakter, szint, hpRolls, tulajdonsagNovelesek}) + let harcosSpecializaciok = karakter.harcosSpecializaciok + if (karakter.osztaly === Osztaly.Harcos && szint % 2 === 0) { + harcosSpecializaciok = harcosSpecializaciok.slice(0, -1) + } + changeKarakter({...karakter, szint, hpRolls, tulajdonsagNovelesek, harcosSpecializaciok}) } export function CanLevelUp(karakter: Pick): boolean { diff --git a/src/pages/CreateCharacter.tsx b/src/pages/CreateCharacter.tsx index 59e52bc..3c1a228 100644 --- a/src/pages/CreateCharacter.tsx +++ b/src/pages/CreateCharacter.tsx @@ -6,35 +6,31 @@ import FajSelector from "../components/FajSelector"; import Tulajdonsagok from "../components/Tulajdonsagok"; import OsztalySelector from "../components/OsztalySelector"; import KarakterKepzettsegek from "../components/KarakterKepzettsegek"; -import { - KarakterTulajdonsagok, - Tulajdonsag, - TulajdonsagokFajjal, - TulajdonsagokTotal -} from "../domain-models/tulajdonsag"; +import {KarakterTulajdonsagok, TulajdonsagokFajjal} from "../domain-models/tulajdonsag"; import MasodlagosErtekek from "../components/MasodlagosErtekek"; import { - AvailableKezpettsegList, GetKepzettsegListaN, - GetNumberOfKepzettsegek, KepzettsegId, SetDefaultKepzettsegek, + AvailableKezpettsegList, + GetKepzettsegListaN, + GetNumberOfKepzettsegek, + KepzettsegId, + SetDefaultKepzettsegek, SetDefaultTolvajKepzettsegek, } from "../domain-models/kepzettsegek"; import {CreatePDF} from "../pdf/character.pdf"; import {KarakterDefaults} from "../domain-models/karakter"; -import BasicNewLevel from "../components/BasicNewLevel"; import {CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek"; import {KarakterInputToPdfView} from "../pdf/karakter_pdf_view"; -import {arraySetN} from "../util"; -import TulajdonsagNoveles from "../components/TulajdonsagNoveles"; import JellemSelector from "../components/JellemSelector"; -import {LevelUp, LevelDown, CanLevelUp} from "../domain-models/level"; +import {CanLevelUp, LevelDown, LevelUp} from "../domain-models/level"; import {Card} from "react-bootstrap"; +import LevelUps from "../components/LevelUps"; +import HarcosFegyverSpecializacio from "../components/HarcosFegyverSpecializacio"; function CreateCharacterPage() { let [karakter, changeKarakter] = useState(KarakterDefaults) const tulajdonsagokFajjal = TulajdonsagokFajjal(karakter.tulajdonsagok, karakter.faj) - const tulajdonsagokTotal = TulajdonsagokTotal(karakter) const changeKepzettseg = (k: KepzettsegId[]) => changeKarakter({...karakter, kepzettsegek: k}) const changeTolvajKepzettseg = (tk?: KepzettsegId[]) => changeKarakter({...karakter, tolvajKepzettsegek: tk}) @@ -42,13 +38,6 @@ function CreateCharacterPage() { SetDefaultKepzettsegek({...karakter, tulajdonsagok: tulajdonsagokFajjal}, changeKepzettseg) const availableKepzettsegList = AvailableKezpettsegList(karakter.osztaly) - - - const changeHProllAtSzint = (szint: number) => (newHProll: number) => { - changeKarakter({...karakter, hpRolls: arraySetN(karakter.hpRolls, szint-2, newHProll)}) - console.log(karakter) - } - const levelUp = () => LevelUp(karakter, changeKarakter) const levelDown = () => LevelDown(karakter, changeKarakter) @@ -108,8 +97,16 @@ function CreateCharacterPage() { changeKarakter({...karakter, osztaly: o})} + changeOsztaly={(o: Osztaly) => changeKarakter({...karakter, osztaly: o, harcosSpecializaciok: o === Osztaly.Harcos ? ['szablya'] : []})} /> + {karakter.osztaly === Osztaly.Harcos && +
+ changeKarakter({...karakter, harcosSpecializaciok: [spec, ...karakter.harcosSpecializaciok.slice(1)]})} + /> +
} - {karakter.hpRolls.map((_, i) => i+2).map(szint => <> - - {szint % 4 === 0 && { changeKarakter({...karakter, tulajdonsagNovelesek: arraySetN(karakter.tulajdonsagNovelesek, Math.floor((szint / 4)-1), t)}) }} - />} - - )} +
{canLevelUp && }