mirror of
https://github.com/morbalint/kemkas.git
synced 2026-07-17 19:03:46 +00:00
fix multiclass level up display
This commit is contained in:
@@ -7,7 +7,9 @@ import {arraySetN} from "../../util";
|
||||
import {Osztaly2E} from "../domain-models/osztaly2E";
|
||||
import KalozKritikus from "./KalozKritikus";
|
||||
import HarcosFegyverSpecializacio from "./HarcosFegyverSpec";
|
||||
import {BasicOsztalySelector2E} from "./OsztalySelector2E";
|
||||
|
||||
import MultiClassOsztalySelector2E from "./MultiClassOsztalySelector2E";
|
||||
import {getClassLevels} from "../domain-models/szintlepes";
|
||||
|
||||
function LevelUp(props: {
|
||||
szint: number,
|
||||
@@ -30,22 +32,30 @@ function LevelUp(props: {
|
||||
changeOsztaly
|
||||
} = props
|
||||
|
||||
const harcosSzint = karakter.szintlepesek.filter(x => x.osztaly === Osztaly2E.Harcos).length
|
||||
const kalozSzint = karakter.szintlepesek.filter(x => x.osztaly === Osztaly2E.Tengeresz).length
|
||||
const classLevels = getClassLevels(karakter.szintlepesek)
|
||||
|
||||
const harcosSzint = classLevels[Osztaly2E.Harcos]
|
||||
const kalozSzint = classLevels[Osztaly2E.Tengeresz]
|
||||
const specialization = karakter.szintlepesek[szint-1].harcosFegyver
|
||||
const krit = karakter.szintlepesek[szint-1].kalozKritikus
|
||||
|
||||
|
||||
return <div>
|
||||
<div className='row mt-3'>
|
||||
<h5 className='col align-self-center'>{szint}. Szint</h5>
|
||||
</div>
|
||||
<BasicOsztalySelector2E faj={karakter.faj} osztaly={osztaly} changeOsztaly={changeOsztaly} />
|
||||
{szint % 4 === 0
|
||||
&& <TulajdonsagNoveles
|
||||
tulajdonsagok={karakter.tulajdonsagok}
|
||||
tulajdonsagNoveles={karakter.szintlepesek[szint-1].tulajdonsagNoveles!}
|
||||
changeTulajdonsagNoveles={changeTulajdonsagNoveles}
|
||||
/>}
|
||||
{osztaly !== Osztaly2E.Druida &&
|
||||
<MultiClassOsztalySelector2E
|
||||
faj={karakter.faj}
|
||||
osztaly={osztaly}
|
||||
changeOsztaly={changeOsztaly}
|
||||
osztalySzint={classLevels[osztaly]}
|
||||
/> }
|
||||
{szint % 4 === 0 &&
|
||||
<TulajdonsagNoveles
|
||||
tulajdonsagok={karakter.tulajdonsagok}
|
||||
tulajdonsagNoveles={karakter.szintlepesek[szint-1].tulajdonsagNoveles!}
|
||||
changeTulajdonsagNoveles={changeTulajdonsagNoveles}
|
||||
/> }
|
||||
<BasicNewLevel
|
||||
szint={szint}
|
||||
karakter={karakter}
|
||||
@@ -60,9 +70,9 @@ function LevelUp(props: {
|
||||
szint={harcosSzint}
|
||||
/>
|
||||
}
|
||||
{osztaly === Osztaly2E.Tengeresz && kalozSzint % 3 === 0 && !!krit &&
|
||||
{osztaly === Osztaly2E.Tengeresz && kalozSzint % 3 === 0 &&
|
||||
<KalozKritikus
|
||||
kritFegyverId={krit}
|
||||
kritFegyverId={krit!}
|
||||
existingKrits={karakter.szintlepesek.map(x => x.kalozKritikus)}
|
||||
changeKrit={changeKalozKritikus}
|
||||
szint={kalozSzint}
|
||||
|
||||
@@ -0,0 +1,54 @@
|
||||
import {Faj2E, SzintKorlatokFajokra} from "../domain-models/faj2E";
|
||||
import {Osztaly2E, OsztalyLabel} from "../domain-models/osztaly2E";
|
||||
import React from "react";
|
||||
|
||||
function MultiClassOsztalySelector2E(props: {
|
||||
faj: Faj2E,
|
||||
osztaly: Osztaly2E,
|
||||
changeOsztaly: (o: Osztaly2E) => void
|
||||
osztalySzint: number
|
||||
}) {
|
||||
const {faj, osztaly, changeOsztaly, osztalySzint} = props
|
||||
|
||||
return <>
|
||||
<div className='row'>
|
||||
<div className="col-lg-6">
|
||||
<div className="row m-md-2">
|
||||
<label className='col-8 col-sm-6 col-form-label'>Osztály</label>
|
||||
<div className="col">
|
||||
<select className="col form-select" value={osztaly}
|
||||
onChange={(e) => changeOsztaly(e.target.value as Osztaly2E)}>
|
||||
<optgroup label='Harcos'>
|
||||
<option value={Osztaly2E.Harcos}>{OsztalyLabel(Osztaly2E.Harcos)}</option>
|
||||
{SzintKorlatokFajokra(faj)[Osztaly2E.Amazon] > 0 && (
|
||||
<option value={Osztaly2E.Amazon}>{OsztalyLabel(Osztaly2E.Amazon)}</option>)}
|
||||
<option value={Osztaly2E.Barbar}>{OsztalyLabel(Osztaly2E.Barbar)}</option>
|
||||
<option value={Osztaly2E.Ijasz}>{OsztalyLabel(Osztaly2E.Ijasz)}</option>
|
||||
<option value={Osztaly2E.Tengeresz}>{OsztalyLabel(Osztaly2E.Tengeresz)}</option>
|
||||
</optgroup>
|
||||
<option value={Osztaly2E.Pap}>{OsztalyLabel(Osztaly2E.Pap)}</option>
|
||||
<option value={Osztaly2E.Tolvaj}>{OsztalyLabel(Osztaly2E.Tolvaj)}</option>
|
||||
<optgroup label='Varázsló'>
|
||||
<option value={Osztaly2E.Varazslo}>{OsztalyLabel(Osztaly2E.Varazslo)}</option>
|
||||
<option value={Osztaly2E.Illuzionista}>{OsztalyLabel(Osztaly2E.Illuzionista)}</option>
|
||||
</optgroup>
|
||||
<optgroup label='Opcionális'>
|
||||
<option value={Osztaly2E.Dalnok}>{OsztalyLabel(Osztaly2E.Dalnok)}</option>
|
||||
{/* Druida nem lehet tobb osztalyu karakter! */}
|
||||
<option value={Osztaly2E.Vandor}>{OsztalyLabel(Osztaly2E.Vandor)}</option>
|
||||
</optgroup>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div className="col-lg-6">
|
||||
<div className="row m-2">
|
||||
<label className='col-sm-6 col-8 col-form-label'>Új {OsztalyLabel(osztaly)} szint{' '}</label>
|
||||
<span className='col col-form-label'>{osztalySzint}</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</>
|
||||
}
|
||||
|
||||
export default MultiClassOsztalySelector2E
|
||||
@@ -8,16 +8,21 @@ import {
|
||||
} from "../domain-models/osztaly2E";
|
||||
import {Faj2E, SzintKorlatokFajokra} from "../domain-models/faj2E";
|
||||
|
||||
export function BasicOsztalySelector2E(props: {faj: Faj2E, osztaly: Osztaly2E, changeOsztaly: (osztaly: Osztaly2E) => void}) {
|
||||
const {faj, osztaly, changeOsztaly} = props;
|
||||
function OsztalySelector2E(props: {
|
||||
currentFaj: Faj2E,
|
||||
currentOsztaly: Osztaly2E,
|
||||
changeOsztaly: (newOsztaly: Osztaly2E) => void
|
||||
}) {
|
||||
const {currentFaj, currentOsztaly, changeOsztaly} = props;
|
||||
|
||||
return <>
|
||||
<div className='row m-2'>
|
||||
<label className='col-md-2 col-sm-3 col-form-label'>Osztály</label>
|
||||
<select className="col form-select" value={osztaly}
|
||||
<select className="col form-select" value={currentOsztaly}
|
||||
onChange={(e) => changeOsztaly(e.target.value as Osztaly2E)}>
|
||||
<optgroup label='Harcos'>
|
||||
<option value={Osztaly2E.Harcos}>{OsztalyLabel(Osztaly2E.Harcos)}</option>
|
||||
{SzintKorlatokFajokra(faj)[Osztaly2E.Amazon] > 0 && (
|
||||
{SzintKorlatokFajokra(currentFaj)[Osztaly2E.Amazon] > 0 && (
|
||||
<option value={Osztaly2E.Amazon}>{OsztalyLabel(Osztaly2E.Amazon)}</option>)}
|
||||
<option value={Osztaly2E.Barbar}>{OsztalyLabel(Osztaly2E.Barbar)}</option>
|
||||
<option value={Osztaly2E.Ijasz}>{OsztalyLabel(Osztaly2E.Ijasz)}</option>
|
||||
@@ -36,18 +41,6 @@ export function BasicOsztalySelector2E(props: {faj: Faj2E, osztaly: Osztaly2E, c
|
||||
</optgroup>
|
||||
</select>
|
||||
</div>
|
||||
</>
|
||||
}
|
||||
|
||||
function OsztalySelector2E(props: {
|
||||
currentFaj: Faj2E,
|
||||
currentOsztaly: Osztaly2E,
|
||||
changeOsztaly: (newOsztaly: Osztaly2E) => void
|
||||
}) {
|
||||
const {currentFaj, currentOsztaly, changeOsztaly} = props;
|
||||
|
||||
return <>
|
||||
<BasicOsztalySelector2E faj={currentFaj} osztaly={currentOsztaly} changeOsztaly={changeOsztaly} />
|
||||
<div className='row m-2'>
|
||||
<label className='col-md-2 col-sm-3 form-label'></label>
|
||||
<div className='col'>
|
||||
|
||||
@@ -56,8 +56,7 @@ export function LevelUp(karakter: Karakter2E, changeKarakter: (input: Karakter2E
|
||||
szintlepes.kalozKritikus = AllowedFegyver(Osztaly2E.Tengeresz).filter(specializationFilter)[0].Id
|
||||
}
|
||||
}
|
||||
console.log(`picked harcos specializacio ${szintlepes.harcosFegyver}`)
|
||||
console.log(`picked kaloz krit ${szintlepes.kalozKritikus}`)
|
||||
|
||||
changeKarakter({...karakter, szint, szintlepesek: [...karakter.szintlepesek, szintlepes]})
|
||||
}
|
||||
|
||||
@@ -68,4 +67,33 @@ export function LevelDown(karakter: Karakter2E, changeKarakter: (input: Karakter
|
||||
else {
|
||||
console.error(`Can't level down character: ${karakter}`)
|
||||
}
|
||||
}
|
||||
|
||||
export type ClassLevels = {
|
||||
[key in Osztaly2E]: number;
|
||||
};
|
||||
|
||||
const defaultClassLevels: ClassLevels = {
|
||||
[Osztaly2E.Amazon]: 0,
|
||||
[Osztaly2E.Barbar]: 0,
|
||||
[Osztaly2E.Ijasz]: 0,
|
||||
[Osztaly2E.Harcos]: 0,
|
||||
[Osztaly2E.Tengeresz]: 0,
|
||||
|
||||
[Osztaly2E.Tolvaj]: 0,
|
||||
[Osztaly2E.Pap]: 0,
|
||||
|
||||
[Osztaly2E.Varazslo]: 0,
|
||||
[Osztaly2E.Illuzionista]: 0,
|
||||
|
||||
[Osztaly2E.Dalnok]: 0,
|
||||
[Osztaly2E.Druida]: 0,
|
||||
[Osztaly2E.Vandor]: 0,
|
||||
}
|
||||
|
||||
export function getClassLevels(szintlepesek: Szintlepes[]) : ClassLevels {
|
||||
return szintlepesek.map(x => x.osztaly).reduce((classLevels, osztaly) => {
|
||||
classLevels[osztaly]++
|
||||
return classLevels
|
||||
}, {...defaultClassLevels})
|
||||
}
|
||||
Reference in New Issue
Block a user