61 lines
1.9 KiB
TypeScript
61 lines
1.9 KiB
TypeScript
import { useGameStore } from "~/store/game.store";
|
|
import type {
|
|
GameDeleteEvent,
|
|
GameEndTurnEvent,
|
|
GameJoinEvent,
|
|
GameMessageDeleteEvent,
|
|
GameMessageEvent,
|
|
GameStartEvent,
|
|
} from "../events/game.events";
|
|
import type { GameResponseDTO } from "../events/dto/gameresponse.dto";
|
|
import { useUserStore } from "~/store/user.store";
|
|
|
|
export const handlers = {
|
|
joingame: (event: GameJoinEvent) => {
|
|
const gameStore = useGameStore();
|
|
gameStore.game.players.push(event.player);
|
|
},
|
|
start: (event: GameStartEvent) => {
|
|
const gameStore = useGameStore();
|
|
gameStore.game.started = true;
|
|
gameStore.game.currentPlayer = event.currentPlayer;
|
|
gameStore.currentWord = null;
|
|
},
|
|
delete: (event: GameDeleteEvent) => {
|
|
const gameStore = useGameStore();
|
|
gameStore.game = {} as GameResponseDTO;
|
|
alert("Game deleted");
|
|
navigateTo("/");
|
|
},
|
|
message: (event: GameMessageEvent) => {
|
|
const gameStore = useGameStore();
|
|
gameStore.game.messages.push(event.message);
|
|
if (!event.message.authorId) {
|
|
const player = gameStore.game.players.find(
|
|
(p) => p.userId == event.message.value
|
|
);
|
|
if (player) {
|
|
player.score++;
|
|
}
|
|
}
|
|
},
|
|
deleteMessage: (event: GameMessageDeleteEvent) => {
|
|
const gameStore = useGameStore();
|
|
const index = gameStore.game.messages.findIndex(
|
|
(m) => m.id == event.messageId
|
|
);
|
|
gameStore.game.messages.splice(index, 1);
|
|
},
|
|
endTurn: (event: GameEndTurnEvent) => {
|
|
const gameStore = useGameStore();
|
|
const userStore = useUserStore();
|
|
gameStore.game.players.forEach((p) => (p.hasGuessed = false));
|
|
gameStore.game.currentConcepts = [];
|
|
gameStore.game.messages = [];
|
|
gameStore.game.currentPlayer = event.currentPlayer;
|
|
if (userStore.self && userStore.self.id == event.currentPlayer.userId) {
|
|
void gameStore.getCurrentWord(gameStore.game.id);
|
|
}
|
|
},
|
|
};
|