mirror of
https://github.com/morbalint/kemkas.git
synced 2026-07-17 19:03:46 +00:00
WIP varazslatok spell levels in spell book
This commit is contained in:
@@ -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 [];
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user