WIP varazslatok spell levels in spell book

This commit is contained in:
2024-07-22 18:05:29 +02:00
parent 6d730263f0
commit c8fd1396d1
2 changed files with 55 additions and 78 deletions
@@ -1,96 +1,55 @@
import React from "react"; import React from "react";
import {KarakterVarazslat, Varazslat} from "../domain-models/varazslat"; import {ClassSpells, KarakterVarazslat} from "../domain-models/varazslat";
import {getClassLevels} from "../domain-models/szintlepes"; import {getClassLevels} from "../domain-models/szintlepes";
import {useDispatch, useSelector} from "react-redux"; import {useDispatch, useSelector} from "react-redux";
import {AppDispatch, RootState} from "../../store"; import {AppDispatch, RootState} from "../../store";
import {addVarazslat, characterSelector, setVarazslat} from "../domain-models/characterSlice"; import {addVarazslat, characterSelector, setVarazslat} from "../domain-models/characterSlice";
import {Osztaly2E} from "../domain-models/osztaly2E"; import {Osztaly2E} from "../domain-models/osztaly2E";
import spells from "../data/spells.json";
import VarazslatSelector from "../display-components/VarazslatSelector"; import VarazslatSelector from "../display-components/VarazslatSelector";
// function VarazskonyvSzint(props: {osztaly: Osztaly2E, level: number, varazslatok: KarakterVarazslat[]}) {
// function VarazslatSzint(props: { const {level, osztaly, varazslatok} = props;
// szint: number, const dispatch = useDispatch.withTypes<AppDispatch>()()
// osztaly: Osztaly2E,
// selected: string[] const classSpells = ClassSpells(osztaly)
// }) { const leveledSpells = classSpells.filter(v => v.szint === level)
// const {szint, osztaly, selected} = props const selectedSpells = varazslatok.map(v => {
// return leveledSpells.find(x => x.id === v.id)
// let classSpells: Varazslat[] = [] }).filter(x => !!x)
// const availableSpells = leveledSpells.filter(v => varazslatok.every(x => x.id !== v.id))
// switch (osztaly) {
// case Osztaly2E.Vandor: return <>
// case Osztaly2E.Varazslo: <h5>{level}. Szintű varázslatok</h5>
// classSpells = (spells.varazslo.tomor as Varazslat[]) {selectedSpells.map((v, i) => (
// break; <VarazslatSelector
// case Osztaly2E.Illuzionista: key={`${i}VarazslatSelector`}
// classSpells = (spells.illuzionista.tomor as Varazslat[]) selected={v.id}
// break; available={[v, ...availableSpells]}
// case Osztaly2E.Dalnok: dataTestId={`varazskonyv_varazslo_1_${v.id}`}
// classSpells = (spells.dalnok.tomor as Varazslat[]) onChange={(nextId) => dispatch(setVarazslat({prev: v.id, next: nextId}))}
// break; />))}
// case Osztaly2E.Druida: {availableSpells.length > 0 && <button className='btn btn-outline-dark'
// classSpells = (spells.druida.tomor as Varazslat[]) onClick={() => dispatch(addVarazslat(availableSpells[0].id))}>
// break; Új varázslat hozzáadása
// case Osztaly2E.Pap: </button>}
// classSpells = (spells.pap.tomor as Varazslat[]) </>;
// break;
// } }
//
//
// classSpells = classSpells.filter(v => v.szint === szint)
//
// const selectedSpells = classSpells.filter(v => selected.includes(v.id))
//
// }
function Varazskonyv(props: {osztaly: Osztaly2E, varazslatok: KarakterVarazslat[] }) { function Varazskonyv(props: {osztaly: Osztaly2E, varazslatok: KarakterVarazslat[] }) {
const {osztaly, varazslatok } = props; const {osztaly, varazslatok } = props;
const dispatch = useDispatch.withTypes<AppDispatch>()() const classSpells = ClassSpells(osztaly)
const spells = varazslatok.map(v => classSpells.find(x => x.id === v.id)).filter(x => !!x)
let classSpells: Varazslat[] = []
switch (osztaly) {
case Osztaly2E.Vandor:
case Osztaly2E.Varazslo:
classSpells = (spells.varazslo.tomor as Varazslat[])
break;
case Osztaly2E.Illuzionista:
classSpells = (spells.illuzionista.tomor as Varazslat[])
break;
case Osztaly2E.Dalnok:
classSpells = (spells.dalnok.tomor as Varazslat[])
break;
case Osztaly2E.Druida:
classSpells = (spells.druida.tomor as Varazslat[])
break;
case Osztaly2E.Pap:
classSpells = (spells.pap.tomor as Varazslat[])
break;
}
const firstLevel = classSpells.filter(v => v.szint === 1)
const firstLevelSelected = varazslatok.map(v => {
return firstLevel.find(x => x.id === v.id)
}).filter(x => !!x)
const firstLevelAvailable = firstLevel.filter(v => varazslatok.every(x => x.id !== v.id))
return <> return <>
<h3>Varázslói Varázskönyv</h3> <h3>Varázslói Varázskönyv</h3>
<h5>1. Szintű varázslatok</h5> <VarazskonyvSzint osztaly={osztaly} level={0} varazslatok={varazslatok} />
{firstLevelSelected.map((v, i) => ( {spells.some(v => v.szint === 0) && <VarazskonyvSzint osztaly={osztaly} level={1} varazslatok={varazslatok} />}
<VarazslatSelector {spells.some(v => v.szint === 1) && <VarazskonyvSzint osztaly={osztaly} level={2} varazslatok={varazslatok} />}
key={`${i}VarazslatSelector`} {spells.some(v => v.szint === 2) && <VarazskonyvSzint osztaly={osztaly} level={3} varazslatok={varazslatok} />}
selected={v.id} {spells.some(v => v.szint === 3) && <VarazskonyvSzint osztaly={osztaly} level={4} varazslatok={varazslatok} />}
available={[v, ...firstLevelAvailable]} {spells.some(v => v.szint === 4) && <VarazskonyvSzint osztaly={osztaly} level={5} varazslatok={varazslatok} />}
dataTestId={`varazskonyv_varazslo_1_${v.id}`}
onChange={(nextId) => dispatch(setVarazslat({prev: v.id, next: nextId}))}
/>))}
<button className='btn btn-outline-dark'
onClick={() => dispatch(addVarazslat(firstLevelAvailable[0].id))}>
Új varázslat hozzáadása
</button>
</>; </>;
} }
@@ -75,3 +75,21 @@ export function GetLeveledSpells(osztaly: Osztaly2E): MagasabbSzintuVarazslat[]
return [] return []
} }
} }
export function ClassSpells(osztaly: Osztaly2E): Varazslat[] {
switch (osztaly) {
case Osztaly2E.Vandor:
case Osztaly2E.Varazslo:
return spells.varazslo.tomor as Varazslat[]
case Osztaly2E.Illuzionista:
return spells.illuzionista.tomor as Varazslat[]
case Osztaly2E.Dalnok:
return spells.dalnok.tomor as Varazslat[]
case Osztaly2E.Druida:
return spells.druida.tomor as Varazslat[]
case Osztaly2E.Pap:
return spells.pap.tomor as Varazslat[]
default:
return [];
}
}