diff --git a/components/MarketCards.vue b/components/MarketCards.vue
index 0b038ad..e8e1600 100644
--- a/components/MarketCards.vue
+++ b/components/MarketCards.vue
@@ -4,7 +4,9 @@ import { CardEffects, type Effect } from '@/netcode/Effect'
import { CardType } from '@/netcode/Card'
const isTurn = computed(() => goStore.self && goStore.current_game?.started && (goStore.self.team == goStore.current_game.current_turn))
+const clientStore = useClientSideStore()
+const buyableFiregem = computed(() => goStore?.current_game?.gem_stack.at(-1))
@@ -16,18 +18,15 @@ const isTurn = computed(() => goStore.self && goStore.current_game?.started && (
-
@@ -39,13 +38,11 @@ const isTurn = computed(() => goStore.self && goStore.current_game?.started && (
BUY
- (e.effect == CardEffects.PLAY_NEXT_CARD_BOUGHT) && e.usable)!, goStore.current_game.gem_stack.at(-1))"
- v-if="goStore.self?.turn.effects_availables.find((e: Effect) => (e.effect == CardEffects.PLAY_NEXT_CARD_BOUGHT) && e.usable)">
+
BUY IN HAND
- (e.effect == CardEffects.STACK_NEXT_CARD_BOUGHT) && e.usable)!, goStore.current_game.gem_stack.at(-1))"
- v-if="goStore.self?.turn.effects_availables.find((e: Effect) => (e.effect == CardEffects.STACK_NEXT_CARD_BOUGHT) && e.usable)">
+
BUY IN STACK(generic)
diff --git a/components/PlayerSlot.vue b/components/PlayerSlot.vue
index 766f8a5..525feb4 100644
--- a/components/PlayerSlot.vue
+++ b/components/PlayerSlot.vue
@@ -15,6 +15,7 @@ import { CardType, type Card } from "~/netcode/Card";
import type { Player } from "~/netcode/Player";
import { CardEffects, type Effect, EffectType } from "@/netcode/Effect";
import type { Team } from "~/netcode/Team";
+import { useClientSideStore } from "~/stores/turn";
export interface Props {
player: Player;
@@ -31,28 +32,15 @@ const isSelf = computed(() => props.player.uuid === goStore.self?.uuid);
const isSelfTurn = computed(() => goStore.self?.team === goStore.current_game?.current_turn)
const isPlayerEnemy = computed(() => goStore.self?.team !== props.player.team)
const warningText = ref("Effets restants!")
-
-function run_effect(
- effect_type: CardEffects,
- target: Player | Card
-) {
- if (!goStore.self?.turn) {
- return
- }
- const effect = goStore.self?.turn.effects_availables.find((e: Effect) => (e.effect == effect_type) && e.usable);
- if (!effect) {
- return;
- }
- useEffect(effect, target);
-}
+const clientStore = useClientSideStore()
const make_discard = (target: Player) =>
- run_effect(CardEffects.MAKE_DISCARD, target);
-const sacrifice = (target: Card) => run_effect(CardEffects.SACRIFICE, target);
-const stun = (target: Card) => run_effect(CardEffects.STUN, target)
-const restack_discarded_champion = (target: Card) => run_effect(CardEffects.RESTACK_DISCARDED_CHAMPION, target)
-const restack_discarded_card = (target: Card) => run_effect(CardEffects.RESTACK_DISCARDED_CARD, target)
-const prepare_champion = (target: Card) => run_effect(CardEffects.PREPARE, target)
+ clientStore.findUseEffect(CardEffects.MAKE_DISCARD, target);
+const sacrifice = (target: Card) => clientStore.findUseEffect(CardEffects.SACRIFICE, target);
+const stun = (target: Card) => clientStore.findUseEffect(CardEffects.STUN, target)
+const restack_discarded_champion = (target: Card) => clientStore.findUseEffect(CardEffects.RESTACK_DISCARDED_CHAMPION, target)
+const restack_discarded_card = (target: Card) => clientStore.findUseEffect(CardEffects.RESTACK_DISCARDED_CARD, target)
+const prepare_champion = (target: Card) => clientStore.findUseEffect(CardEffects.PREPARE, target)
let warning = ref(false)
@@ -100,6 +88,7 @@ function damage_team_all(team: Team) {
function check_for_guard(player: Player) {
return player.board.some(c => c.guard === true)
}
+
@@ -119,19 +108,18 @@ function check_for_guard(player: Player) {
-
SACRIFICE
RESTACK_DISCARDED_CHAMPION
RESTACK_DISCARDED_CARD
@@ -139,7 +127,6 @@ function check_for_guard(player: Player) {
-
@@ -180,7 +167,7 @@ function check_for_guard(player: Player) {
+ :disabled="!clientStore.activatedClientside.find((e: Effect) => (e.effect == CardEffects.MAKE_DISCARD) && e.usable)">
make Discard
@@ -202,15 +189,24 @@ function check_for_guard(player: Player) {
-
-
- EFFECT
- {{ e.effect + " " + (e.effect_type ?? '') }}
-
+
+
+
+ EFFECT
+ {{ e.effect + " " + (e.effect_type ?? '') }}
+
+
+ EFFECT
+ {{ e.effect + " " + (e.effect_type ?? '') }}
+
+
PREPARE
@@ -220,7 +216,7 @@ function check_for_guard(player: Player) {
DISCARD
SACRIFICE
@@ -238,7 +234,7 @@ function check_for_guard(player: Player) {
DAMAGE ({{ c.health_as_champion }})
STUN
diff --git a/stores/turn.ts b/stores/turn.ts
new file mode 100644
index 0000000..a38ef21
--- /dev/null
+++ b/stores/turn.ts
@@ -0,0 +1,54 @@
+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)
+ }
+ },
+});