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) } }, });