Files
webapp-front/netcode/handlers/game.handler.ts
T
2024-12-30 20:15:02 +01:00

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