use Redux for tulajdonsagok

This commit is contained in:
2024-03-31 11:55:56 +02:00
parent edbe8934e4
commit a922b006bc
12 changed files with 212 additions and 71 deletions
@@ -0,0 +1,82 @@
import {Osztaly2E} from "./osztaly2E";
import {CelzoTB, KozelharciTB, TamadasBonusz} from "./tamadas_bonusz";
import {KarakterTulajdonsagok, Modifier} from "./tulajdonsag2E";
import {Szintlepes} from "./szintlepes";
import {d6} from "../../shared/domain-models/kockak";
describe('Tamadas Bonusz calculation', () => {
describe('Base Tamadas Bonusz', () => {
test.each([
[Osztaly2E.Harcos, 1, [1]],
[Osztaly2E.Amazon, 6, [6,1]],
[Osztaly2E.Ijasz, 12, [10,7,2]],
[Osztaly2E.Tolvaj, 1, [0]],
[Osztaly2E.Tolvaj, 9, [6,1]],
[Osztaly2E.Pap, 12, [8,3]],
[Osztaly2E.Varazslo, 1, [0]],
[Osztaly2E.Varazslo, 12, [6, 1]],
[Osztaly2E.Illuzionista, 5, [2]],
])('%s has a TB of %i at level %i', (osztaly: Osztaly2E, szint: number, expectedTB: number[]) => {
const actual = TamadasBonusz(osztaly, szint)
expect(actual).toEqual(expectedTB)
})
});
describe('CelzoTB', () => {
const szint = 10
const tulajdonsagok: KarakterTulajdonsagok = {
t_ugy: 17,
t_kar: 3,
t_bol: 3,
t_egs: 3,
t_ero: 3,
t_int: 3,
}
const modifier = Modifier(tulajdonsagok.t_ugy)
it('should be equal base + ugyesseg modifier', () => {
const osztaly = Osztaly2E.Tolvaj
const szintlepesek = Array.from({length: szint},
() => ({ osztaly, HProll: d6(), }))
const base = TamadasBonusz(osztaly, szint)
const expected = base.map(x => x + modifier)
const actual = CelzoTB({
szintlepesek,
tulajdonsagok
})
expect(actual).toEqual(expected)
});
});
describe('KozelharciTB', () => {
const szint = 10
const tulajdonsagok: KarakterTulajdonsagok = {
t_ugy: 3,
t_kar: 3,
t_bol: 3,
t_egs: 3,
t_ero: 3,
t_int: 3,
}
const modifier = Modifier(tulajdonsagok.t_ero)
it('should be equal base + ero modifier', () => {
const osztaly = Osztaly2E.Pap
const szintlepesek: Szintlepes[] = Array.from({length: szint},
() => ({ osztaly, HProll: 1, }));
const base = TamadasBonusz(osztaly, szint)
const expected = base.map(x => x + modifier)
const actual = KozelharciTB({
szintlepesek,
tulajdonsagok
})
expect(actual).toEqual(expected)
});
});
});
@@ -1,6 +1,6 @@
import {d6} from "../../shared/domain-models/kockak";
import {Karakter2E} from "./karakter2E";
import {TulajdonsagokFajjal} from "./faj2E";
import {RollAbility} from "../../shared/domain-models/rollAbility";
export enum Tulajdonsag2E {
Ero = 't_ero',
@@ -42,27 +42,10 @@ export function TulajdonsagLabel(tul: Tulajdonsag2E) : string {
}
}
function rollAbility() {
let min = 6;
let sum = 0;
let rolls: number[] = []
for (let i = 0; i < 4; i++) {
const roll = d6();
if (roll < min) {
min = roll;
}
sum += roll;
rolls.push(roll)
}
const result = sum - min;
console.log("Rolled: " + rolls + " got: " + result)
return result;
}
export function RollAllAbilities() : KarakterTulajdonsagok {
const response = {...TulajdonsagDefaults}
for (const key of TulajdonsagIDs) {
response[key] = rollAbility()
response[key] = RollAbility()
}
return response
}
@@ -0,0 +1,37 @@
import {createSlice} from "@reduxjs/toolkit";
import {RollAllAbilities, TulajdonsagDefaults} from "./tulajdonsag2E";
export const tulajdonsagSlice = createSlice({
name: "tulajdonsag2E",
initialState: TulajdonsagDefaults,
reducers: {
rollAbilities: (state) => {
state = RollAllAbilities()
return state;
},
setEro: (state, action: {payload: number}) => {
state.t_ero = action.payload;
},
setUgyesseg: (state, action: {payload: number}) => {
state.t_ugy = action.payload;
},
setEgeszseg: (state, action: {payload: number}) => {
state.t_egs = action.payload;
},
setIntelligencia: (state, action: {payload: number}) => {
state.t_int = action.payload;
},
setBolcsesseg: (state, action: {payload: number}) => {
state.t_bol = action.payload;
},
setKarizma: (state, action: {payload: number}) => {
state.t_kar = action.payload;
},
},
})
export const { rollAbilities, setEro, setUgyesseg, setEgeszseg, setIntelligencia, setBolcsesseg, setKarizma } = tulajdonsagSlice.actions
export const tulajdonsagSelector = tulajdonsagSlice.selectSlice;
export default tulajdonsagSlice.reducer