Files
front/stores/turn.ts
T
legonzaur 8a688bd2da
release-tag / release-image (push) Successful in 46s
Feat : Allow granular control over indirectly activated effects
Testing probably needs to be done
Closes #12
2024-05-17 09:42:44 +02:00

55 lines
1.9 KiB
TypeScript

import { defineStore } from "pinia";
import goStore, { useEffect } from "~/netcode";
import type { Card } from "~/netcode/Card";
import { CardEffects, type Effect } from "~/netcode/Effect";
import type { Player } from "~/netcode/Player";
watch(
() => goStore.current_game?.current_turn.uuid,
() => {
useClientSideStore().activatedClientside = []
})
export const useClientSideStore = defineStore("clientside", {
state: () => ({
activatedClientside: [] as Effect[],
effectsHandled: new Set([
CardEffects.MAKE_DISCARD,
CardEffects.PLAY_NEXT_CARD_BOUGHT,
CardEffects.RESTACK_DISCARDED_CARD,
CardEffects.RESTACK_DISCARDED_CHAMPION,
CardEffects.SACRIFICE,
CardEffects.STACK_NEXT_ACTION_BOUGHT,
CardEffects.STACK_NEXT_CARD_BOUGHT,
CardEffects.STUN,
]),
}),
getters: {
maskedServerEffects(state) {
return goStore.self?.turn?.effects_availables.filter(e => !state.activatedClientside.includes(e));
},
},
actions: {
activateEffect(effect: Effect) {
const amount =
goStore.self?.turn?.effects_availables.filter((e) => e == effect)
.length ?? 0;
for (let i = 0; i < amount; i++) {
this.activatedClientside.push(effect);
}
},
useEffect(effect: Effect, target: Player | Card) {
const index = this.activatedClientside.indexOf(effect);
if (index > -1) {
this.activatedClientside.splice(index, 1);
useEffect(effect, target);
}
},
findUseEffect(cardEffect: CardEffects, target: Player | Card) {
const effect = this.activatedClientside.find(e => (e.effect == cardEffect) && e.usable)
if (!effect) { return }
this.useEffect(effect, target)
}
},
});