Initial commit

This commit is contained in:
2025-05-06 12:41:50 +00:00
commit aec7504e67
33 changed files with 15916 additions and 0 deletions
+63
View File
@@ -0,0 +1,63 @@
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();
const userStore = useUserStore();
gameStore.game.started = true;
gameStore.game.currentPlayer = event.currentPlayer;
gameStore.currentWord = null;
if (userStore.self && userStore.self.id == event.currentPlayer.userId) {
void gameStore.getCurrentWord(gameStore.game.id);
}
},
delete: async (event: GameDeleteEvent) => {
const gameStore = useGameStore();
gameStore.game = {} as GameResponseDTO;
alert("Game deleted");
await 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.messages = [];
gameStore.game.currentPlayer = event.currentPlayer;
if (userStore.self && userStore.self.id == event.currentPlayer.userId) {
void gameStore.getCurrentWord(gameStore.game.id);
}
},
};
+34
View File
@@ -0,0 +1,34 @@
import { useLobbyStore } from "~/store/lobby.store";
import type {
LobbyCreateEvent,
LobbyDeleteEvent,
LobbyJoinEvent,
LobbyLeaveEvent,
LobbyStartEvent,
} from "../events/lobby.events";
export const handlers = {
create: (event: LobbyCreateEvent) => {
const lobbyStore = useLobbyStore();
lobbyStore.games[event.game.id] = event.game;
},
start: (event: LobbyStartEvent) => {
const lobbyStore = useLobbyStore();
lobbyStore.games[event.game.id].started = true;
},
delete: (event: LobbyDeleteEvent) => {
const lobbyStore = useLobbyStore();
delete lobbyStore.games[event.id];
},
joingame: (event: LobbyJoinEvent) => {
const lobbyStore = useLobbyStore();
lobbyStore.games[event.game.id].players.push(event.player);
},
leavegame: (event: LobbyLeaveEvent) => {
const lobbyStore = useLobbyStore();
const playerIndex = lobbyStore.games[event.game.id].players.findIndex(
(p) => p.userId == event.player.userId,
);
lobbyStore.games[event.game.id].players.splice(playerIndex, 1);
},
};
+31
View File
@@ -0,0 +1,31 @@
import { useWordStore } from "~/store/word.store";
import {
WordCreateEvent,
WordDeleteEvent,
WordDisableEvent,
WordEditEvent,
WordEnableEvent,
} from "../events/word.events";
export const handlers = {
create: (event: WordCreateEvent) => {
const wordStore = useWordStore();
wordStore.words[event.word.id] = event.word;
},
edit: (event: WordEditEvent) => {
const wordStore = useWordStore();
wordStore.words[event.word.id].value = event.word.value;
},
delete: (event: WordDeleteEvent) => {
const wordStore = useWordStore();
delete wordStore.words[event.id];
},
enable: (event: WordEnableEvent) => {
const wordStore = useWordStore();
wordStore.words[event.id].enabled = true;
},
disable: (event: WordDisableEvent) => {
const wordStore = useWordStore();
wordStore.words[event.id].enabled = false;
},
};
+8
View File
@@ -0,0 +1,8 @@
export function subscribe(endpoint: string) {
const config = useRuntimeConfig();
const evtSource = new EventSource(config.public.endpoint + endpoint, {
withCredentials: true,
});
return evtSource;
}