diff --git a/src/components/TulajdonsagNoveles.tsx b/src/components/TulajdonsagNoveles.tsx new file mode 100644 index 0000000..e8c0370 --- /dev/null +++ b/src/components/TulajdonsagNoveles.tsx @@ -0,0 +1,31 @@ +import React from "react"; +import {KarakterTulajdonsagok, Tulajdonsag, TulajdonsagIDs, TulajdonsagLabel} from "../domain-models/tulajdonsag"; + +function TulajdonsagNoveles(props: {tulajdonsagok: KarakterTulajdonsagok, szint: number, tulajdonsagNovelesek: Tulajdonsag[], changeTulajdonsagNoveles: (tulajdonsag: Tulajdonsag) => void}) { + const {tulajdonsagok, szint, tulajdonsagNovelesek, changeTulajdonsagNoveles} = props + const tulajdonsagNoveles = tulajdonsagNovelesek[(szint / 4)-1] + return <> +
+
+
+ +
+ +
+
+
+
+
+ + {tulajdonsagok[tulajdonsagNoveles]} +
+
+
+ +} + +export default TulajdonsagNoveles \ No newline at end of file diff --git a/src/domain-models/karakter.ts b/src/domain-models/karakter.ts index 92f20e2..bcd933d 100644 --- a/src/domain-models/karakter.ts +++ b/src/domain-models/karakter.ts @@ -15,7 +15,7 @@ export interface KarakterInputs { tolvajKepzettsegek?: KepzettsegId[] szint: number hpRolls: number[], - tulajdonsagNovekedes: Tulajdonsag[], + tulajdonsagNovelesek: Tulajdonsag[], } export const KarakterDefaults: KarakterInputs = { @@ -27,6 +27,5 @@ export const KarakterDefaults: KarakterInputs = { kepzettsegek: [], szint: 1, hpRolls: [], - tulajdonsagNovekedes: [] + tulajdonsagNovelesek: [] } - diff --git a/src/domain-models/tulajdonsag.ts b/src/domain-models/tulajdonsag.ts index 1ca0123..94e155f 100644 --- a/src/domain-models/tulajdonsag.ts +++ b/src/domain-models/tulajdonsag.ts @@ -1,5 +1,6 @@ import {d6} from "./kockak"; import {Faj} from "./faj"; +import {KarakterInputs} from "./karakter"; export enum Tulajdonsag { Ero = 't_ero', @@ -12,6 +13,15 @@ export enum Tulajdonsag { export type KarakterTulajdonsagok = Record +export const TulajdonsagIDs = [ + Tulajdonsag.Ero, + Tulajdonsag.Ugyesseg, + Tulajdonsag.Egeszseg, + Tulajdonsag.Intelligencia, + Tulajdonsag.Bolcsesseg, + Tulajdonsag.Karizma +] + export const TulajdonsagDefaults: KarakterTulajdonsagok = { t_ero: 10, t_ugy: 10, @@ -50,22 +60,18 @@ function rollAbility() { } export function RollAllAbilities() : KarakterTulajdonsagok { - return { - t_ero: rollAbility(), - t_ugy: rollAbility(), - t_egs: rollAbility(), - t_int: rollAbility(), - t_bol: rollAbility(), - t_kar: rollAbility(), + const response = {...TulajdonsagDefaults} + for (const key of TulajdonsagIDs) { + response[key] = rollAbility() } + return response } export const Modifier = (val : number) => Math.floor(val / 3) - 3 export function TulajdonsagModosito(tulajdonsagok: KarakterTulajdonsagok): KarakterTulajdonsagok { let response: KarakterTulajdonsagok = { ...tulajdonsagok } - const keys = Object.keys(tulajdonsagok) as (keyof KarakterTulajdonsagok)[] - for (const key of keys) { + for (const key of TulajdonsagIDs) { response[key] = Modifier(tulajdonsagok[key]) } return response @@ -131,17 +137,6 @@ export function TulajdonsagModositokFajokra(tul: Tulajdonsag) { return (faj: Faj) => tulajdonsagModositokPerFaj(tul, faj); } -export function FajiTulajdonsagModositok(faj: Faj) : KarakterTulajdonsagok { - return { - [Tulajdonsag.Ero]: tulajdonsagModositokPerFaj(Tulajdonsag.Ero, faj), - [Tulajdonsag.Ugyesseg]: tulajdonsagModositokPerFaj(Tulajdonsag.Ugyesseg, faj), - [Tulajdonsag.Egeszseg]: tulajdonsagModositokPerFaj(Tulajdonsag.Egeszseg, faj), - [Tulajdonsag.Intelligencia]: tulajdonsagModositokPerFaj(Tulajdonsag.Intelligencia, faj), - [Tulajdonsag.Bolcsesseg]: tulajdonsagModositokPerFaj(Tulajdonsag.Bolcsesseg, faj), - [Tulajdonsag.Karizma]: tulajdonsagModositokPerFaj(Tulajdonsag.Karizma, faj), - } -} - export function TulajdonsagokFajjal(tulajdonsagok: KarakterTulajdonsagok, faj: Faj): KarakterTulajdonsagok { return { [Tulajdonsag.Ero]: tulajdonsagok.t_ero + tulajdonsagModositokPerFaj(Tulajdonsag.Ero, faj), @@ -151,4 +146,12 @@ export function TulajdonsagokFajjal(tulajdonsagok: KarakterTulajdonsagok, faj: F [Tulajdonsag.Bolcsesseg]: tulajdonsagok.t_bol + tulajdonsagModositokPerFaj(Tulajdonsag.Bolcsesseg, faj), [Tulajdonsag.Karizma]: tulajdonsagok.t_kar + tulajdonsagModositokPerFaj(Tulajdonsag.Karizma, faj), } -} \ No newline at end of file +} + +export function TulajdonsagokTotal(karakter: Pick): KarakterTulajdonsagok { + const response = TulajdonsagokFajjal(karakter.tulajdonsagok, karakter.faj) + for (const tulajdonsag of karakter.tulajdonsagNovelesek) { + response[tulajdonsag] += 1 + } + return response +} diff --git a/src/pages/CreateCharacter.tsx b/src/pages/CreateCharacter.tsx index 495851a..ea0260e 100644 --- a/src/pages/CreateCharacter.tsx +++ b/src/pages/CreateCharacter.tsx @@ -6,7 +6,13 @@ import FajSelector from "../components/FajSelector"; import Tulajdonsagok from "../components/Tulajdonsagok"; import OsztalySelector from "../components/OsztalySelector"; import KarakterKepzettsegek from "../components/KarakterKepzettsegek"; -import {KarakterTulajdonsagok, TulajdonsagokFajjal} from "../domain-models/tulajdonsag"; +import { + KarakterTulajdonsagok, + Tulajdonsag, + TulajdonsagIDs, + TulajdonsagokFajjal, + TulajdonsagokTotal +} from "../domain-models/tulajdonsag"; import MasodlagosErtekek from "../components/MasodlagosErtekek"; import { AvailableKezpettsegList, @@ -20,29 +26,47 @@ import {dAny} from "../domain-models/kockak"; import {BaseHP, CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek"; import {KarakterInputToPdfView} from "../pdf/karakter_pdf_view"; import {arraySetN} from "../util"; +import TulajdonsagNoveles from "../components/TulajdonsagNoveles"; function CreateCharacterPage() { let [karakter, changeKarakter] = useState(KarakterDefaults) - const tulajdonsagokTotal = TulajdonsagokFajjal(karakter.tulajdonsagok, karakter.faj) + 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}) SetDefaultTolvajKepzettsegek(karakter, changeTolvajKepzettseg) - SetDefaultKepzettsegek({...karakter, tulajdonsagok: tulajdonsagokTotal}, changeKepzettseg) + SetDefaultKepzettsegek({...karakter, tulajdonsagok: tulajdonsagokFajjal}, changeKepzettseg) const availableKepzettsegList = AvailableKezpettsegList(karakter.osztaly) function levelUp() { const szint = karakter.szint + 1 const dice = BaseHP(karakter.osztaly) const roll = dAny(dice) + const hpRolls = [...karakter.hpRolls, roll] console.log(`Level ${szint} HP roll on d${dice} is: ${roll}`) - changeKarakter({...karakter, szint: szint, hpRolls: [...karakter.hpRolls, roll]}) + let tulajdonsagNovelesek = karakter.tulajdonsagNovelesek + if (szint % 4 === 0) { + for (const tulajdonsag of TulajdonsagIDs) { + if (tulajdonsagokTotal[tulajdonsag] < 18) { + tulajdonsagNovelesek = [...tulajdonsagNovelesek, tulajdonsag] + break; + } + } + } + changeKarakter({...karakter, szint, hpRolls, tulajdonsagNovelesek}) } function levelDown() { - changeKarakter({...karakter, szint: karakter.szint - 1, hpRolls: karakter.hpRolls.slice(0, -1)}) + let tulajdonsagNovelesek = karakter.tulajdonsagNovelesek + if (karakter.szint % 4 === 0) { + tulajdonsagNovelesek = tulajdonsagNovelesek.slice(0, -1) + } + const szint = karakter.szint - 1 + const hpRolls = karakter.hpRolls.slice(0, -1) + changeKarakter({...karakter, szint, hpRolls, tulajdonsagNovelesek}) } const changeHProllAtSzint = (szint: number) => (newHProll: number) => { @@ -107,7 +131,7 @@ function CreateCharacterPage() { />
- + - {karakter.hpRolls.map((_, i) => i+2).map(szint => ( - ) + {karakter.hpRolls.map((_, i) => i+2).map(szint => <> + + {szint % 4 === 0 && { changeKarakter({...karakter, tulajdonsagNovelesek: arraySetN(karakter.tulajdonsagNovelesek, Math.floor((szint / 4)-1), t)}) }} + />} + )}
diff --git a/src/pdf/karakter_pdf_view.ts b/src/pdf/karakter_pdf_view.ts index e03d04a..368735a 100644 --- a/src/pdf/karakter_pdf_view.ts +++ b/src/pdf/karakter_pdf_view.ts @@ -1,4 +1,8 @@ -import {KarakterTulajdonsagok, TulajdonsagModosito, TulajdonsagokFajjal} from "../domain-models/tulajdonsag"; +import { + KarakterTulajdonsagok, + TulajdonsagModosito, + TulajdonsagokTotal +} from "../domain-models/tulajdonsag"; import {Mentok, MentokAlap, MentoModositok} from "../domain-models/mentok"; import {Kepzettseg, Kepzettsegek} from "../domain-models/kepzettsegek"; import {CalculateMasodlagosErtekek} from "../domain-models/masodlagos_ertekek"; @@ -31,7 +35,7 @@ export interface KarakterPdfView { } export function KarakterInputToPdfView(karakter: KarakterInputs): KarakterPdfView { - const tulajdonsagok = TulajdonsagokFajjal(karakter.tulajdonsagok, karakter.faj) + const tulajdonsagok = TulajdonsagokTotal(karakter) karakter = {...karakter, tulajdonsagok} const tulajdonsagModositok = TulajdonsagModosito(tulajdonsagok) const masodlagosErtekek = CalculateMasodlagosErtekek(karakter)