56 lines
1.9 KiB
TypeScript
56 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,
|
|
CardEffects.PREPARE
|
|
]),
|
|
}),
|
|
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)
|
|
}
|
|
},
|
|
});
|