diff --git a/srcs/requirements/game_server/game_back/src/server/wsServer.ts b/srcs/requirements/game_server/game_back/src/server/wsServer.ts index d3bab3d2..35923df1 100644 --- a/srcs/requirements/game_server/game_back/src/server/wsServer.ts +++ b/srcs/requirements/game_server/game_back/src/server/wsServer.ts @@ -94,10 +94,15 @@ async function clientAnnounceListener(this: WebSocket, data: string) "Content-Type": "application/json", }, body: JSON.stringify(body) - }); - if (!response.ok) + }) + .catch(error => console.log("ERROR : " + error)); + if (!response || !response.ok) { - this.send(JSON.stringify( new ev.EventError((await response.json()).message) )); + let errMessage = "validate token error"; + if (response) { + errMessage = (await response.json()).message; + } + this.send(JSON.stringify( new ev.EventError(errMessage) )); clientTerminate(clientsMap.get(this.id)); return; } @@ -154,6 +159,8 @@ function publicMatchmaking(player: ClientPlayer) const compatiblePlayers: ClientPlayer[] = []; compatiblePlayers.push(player); + + /* // Replace with this code to enable the possibility to play against self for (const [id, client] of matchmakingMap) { if (client.matchOptions === matchOptions) @@ -163,10 +170,9 @@ function publicMatchmaking(player: ClientPlayer) break; } } - } + } */ - // TODO: Replace with this code to disable the possibility to play against self -/* for (const [id, client] of matchmakingMap) + for (const [id, client] of matchmakingMap) { if (client.matchOptions === matchOptions && client.username !== player.username) { @@ -175,7 +181,7 @@ function publicMatchmaking(player: ClientPlayer) break; } } - } */ + } if (compatiblePlayers.length >= minPlayersNumber) { compatiblePlayers.forEach((client) => { @@ -231,7 +237,6 @@ function privateMatchmaking(player: ClientPlayer) token : player.token }) }) - .then(x => x.json()) .catch(error => console.log("ERROR : " + error)); clientTerminate(player); } @@ -252,18 +257,26 @@ function createGameSession(playersArr: ClientPlayer[], matchOptions: en.MatchOpt gameSession.unreadyPlayersMap.set(client.id, client); client.socket.once("message", playerReadyConfirmationListener); }); + + let gameSessionPlayersIterator = gameSession.playersMap.values(); + const eventMatchmakingComplete = new ev.EventMatchmakingComplete( + (gameSessionPlayersIterator.next().value).username, + (gameSessionPlayersIterator.next().value).username + ); // REFACTORING: Not pretty, hardcoded two players. // Could be done in gameSession maybe ? - const gameSessionPlayersIterator = gameSession.playersMap.values(); + gameSessionPlayersIterator = gameSession.playersMap.values(); let player: ClientPlayer; player = (gameSessionPlayersIterator.next().value); player.racket = gameSession.components.playerLeft; - player.socket.send(JSON.stringify( new ev.EventMatchmakingComplete(en.PlayerSide.left) )); + eventMatchmakingComplete.side = en.PlayerSide.left; + player.socket.send(JSON.stringify( eventMatchmakingComplete )); player = (gameSessionPlayersIterator.next().value); player.racket = gameSession.components.playerRight; - player.socket.send(JSON.stringify( new ev.EventMatchmakingComplete(en.PlayerSide.right) )); + eventMatchmakingComplete.side = en.PlayerSide.right; + player.socket.send(JSON.stringify( eventMatchmakingComplete )); // REFACTORING setTimeout(function abortMatch() { diff --git a/srcs/requirements/game_server/game_back/src/shared_js/class/Event.ts b/srcs/requirements/game_server/game_back/src/shared_js/class/Event.ts index 0147ead8..e5938e29 100644 --- a/srcs/requirements/game_server/game_back/src/shared_js/class/Event.ts +++ b/srcs/requirements/game_server/game_back/src/shared_js/class/Event.ts @@ -18,10 +18,13 @@ export class EventAssignId extends ServerEvent { } export class EventMatchmakingComplete extends ServerEvent { - side: en.PlayerSide; - constructor(side: en.PlayerSide) { + side: en.PlayerSide = en.PlayerSide.noSide; + playerOneUsername: string; + playerTwoUsername: string; + constructor(playerOneUsername: string, playerTwoUsername: string) { super(en.EventTypes.matchmakingComplete); - this.side = side; + this.playerOneUsername = playerOneUsername; + this.playerTwoUsername = playerTwoUsername; } } diff --git a/srcs/requirements/nestjs/api_back/src/game/game.service.ts b/srcs/requirements/nestjs/api_back/src/game/game.service.ts index 0f2d7556..a6f7cd02 100644 --- a/srcs/requirements/nestjs/api_back/src/game/game.service.ts +++ b/srcs/requirements/nestjs/api_back/src/game/game.service.ts @@ -92,7 +92,8 @@ export class GameService { } this.userRepository.save(user); } - if (grantTicketDto.isGameIsWithInvitation === true && user.status !== STATUS.IN_GAME) + // if (grantTicketDto.isGameIsWithInvitation === true && user.status !== STATUS.IN_GAME) // WIP: need to fix STATUS.IN_GAME + if (grantTicketDto.isGameIsWithInvitation === true) { const secondUser : Partial = await this.userService.findOne(grantTicketDto.playerTwoUsername) if (!secondUser || secondUser.username === user.username) @@ -104,17 +105,18 @@ export class GameService { tok.numberOfRegisteredUser = 0; tok.token = encryptedTextToReturn; this.tokenGameRepository.save(tok); - this.userService.updateStatus(user.id, "In Pool") + this.userService.updateStatus(user.id, STATUS.IN_POOL) return res.status(HttpStatus.OK).json({ token : encryptedTextToReturn }); } - else if (grantTicketDto.isGameIsWithInvitation === false && user.status !== STATUS.IN_GAME) { + // else if (grantTicketDto.isGameIsWithInvitation === false && user.status !== STATUS.IN_GAME) { // WIP: need to fix STATUS.IN_GAME + else if (grantTicketDto.isGameIsWithInvitation === false) { const encryptedTextToReturn = await this.encryptToken(user.username + '_' + grantTicketDto.gameOptions + '_' + grantTicketDto.isGameIsWithInvitation + '_' + new Date()) const tok = this.tokenGameRepository.create(grantTicketDto); tok.numberOfRegisteredUser = 0; tok.token = encryptedTextToReturn; this.tokenGameRepository.save(tok); - this.userService.updateStatus(user.id, "In Pool") + this.userService.updateStatus(user.id, STATUS.IN_POOL) return res.status(HttpStatus.OK).json({ token : encryptedTextToReturn }); } return res.status(HttpStatus.INTERNAL_SERVER_ERROR).json({message : "Internal Server Error"}); @@ -140,13 +142,13 @@ export class GameService { const userOne : User = await this.userRepository.createQueryBuilder('user') .where("user.username = :username", {username : tokenGame.playerOneUsername}) .getOne(); - this.userService.updateStatus(userOne.id, "In Game") + this.userService.updateStatus(userOne.id, STATUS.IN_GAME) const userTwo : User = await this.userRepository.createQueryBuilder('user') .where("user.username = :username", {username : tokenGame.playerTwoUsername}) .getOne(); this.deleteToken(userOne) this.deleteToken(userTwo) - this.userService.updateStatus(userTwo.id, "In Game") + this.userService.updateStatus(userTwo.id, STATUS.IN_GAME) } return true; } @@ -166,7 +168,7 @@ export class GameService { const user : User = await this.userRepository.createQueryBuilder('user') .where("user.username = :username", {username : tokenGame.playerOneUsername}) .getOne(); - this.userService.updateStatus(user.id, "In Game") + this.userService.updateStatus(user.id, STATUS.IN_GAME) this.deleteToken(user) return true; } @@ -196,7 +198,7 @@ export class GameService { async declineInvitation(user : User, token : string, @Res() res : Response) { - if (user.status !== "Connected") + if (user.status !== STATUS.CONNECTED) return res.status(HttpStatus.FORBIDDEN).json({message : "You must not be in game to decline an invitation"}); console.log("On décline l'invitation") const tokenGame = await this.tokenGameRepository.createQueryBuilder('tokengame') @@ -221,10 +223,10 @@ export class GameService { { const playerOne = await this.userRepository.findOneBy({username : tokenGame.playerOneUsername}) const playerTwo = await this.userRepository.findOneBy({username : tokenGame.playerTwoUsername}) - if (playerOne.status !== "Disconnected") - this.userService.updateStatus(playerOne.id, "Connected") - if (playerTwo.status !== "Disconnected") - this.userService.updateStatus(playerTwo.id, "Connected") + if (playerOne.status !== STATUS.DISCONNECTED) + this.userService.updateStatus(playerOne.id, STATUS.CONNECTED) + if (playerTwo.status !== STATUS.DISCONNECTED) + this.userService.updateStatus(playerTwo.id, STATUS.CONNECTED) return this.tokenGameRepository.remove(tokenGame); } return new HttpException("Token not found !", HttpStatus.NOT_FOUND) @@ -232,7 +234,7 @@ export class GameService { async acceptInvitation(user : User, token : string, @Res() res : Response) { - if (user.status !== "Connected") + if (user.status !== STATUS.CONNECTED) return res.status(HttpStatus.FORBIDDEN).send("") const tokenGame = await this.tokenGameRepository.createQueryBuilder('tokenGame') .andWhere('tokenGame.playerTwoUsername = :playerTwoUsername', {playerTwoUsername : user.username}) @@ -294,8 +296,8 @@ export class GameService { this.userService.incrementVictories(playerOne.id) this.userService.incrementDefeats(playerTwo.id) } - this.userService.updateStatus(playerOne.id, "Connected") - this.userService.updateStatus(playerTwo.id, "Connected") + this.userService.updateStatus(playerOne.id, STATUS.CONNECTED) + this.userService.updateStatus(playerTwo.id, STATUS.CONNECTED) return HttpStatus.OK } } diff --git a/srcs/requirements/svelte/api_front/src/App.svelte b/srcs/requirements/svelte/api_front/src/App.svelte index 95e04345..1ed6baff 100644 --- a/srcs/requirements/svelte/api_front/src/App.svelte +++ b/srcs/requirements/svelte/api_front/src/App.svelte @@ -1,9 +1,6 @@ - diff --git a/srcs/requirements/svelte/api_front/src/pages/NotFound.svelte b/srcs/requirements/svelte/api_front/src/pages/NotFound.svelte index bb70cc71..f34342e6 100644 --- a/srcs/requirements/svelte/api_front/src/pages/NotFound.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/NotFound.svelte @@ -4,14 +4,7 @@

We are sorry!

This isn't a url that we use.

-

Go home you're drunk.

Take me home →

-
- - \ No newline at end of file + \ No newline at end of file diff --git a/srcs/requirements/svelte/api_front/src/pages/SplashPage.svelte b/srcs/requirements/svelte/api_front/src/pages/SplashPage.svelte index a2a3b116..d2497cb5 100644 --- a/srcs/requirements/svelte/api_front/src/pages/SplashPage.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/SplashPage.svelte @@ -74,7 +74,6 @@ overflow-y: hidden; } */ - header { /* didn't work... */ overflow-y: hidden; diff --git a/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte b/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte index 97c56656..d2d39d21 100644 --- a/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/game/Game.svelte @@ -1,9 +1,10 @@ @@ -102,6 +111,12 @@ {#if !hiddenGame} +
+ player one avatar + '{gameState.playerOneUsername}' VS '{gameState.playerTwoUsername}' + player two avatar +
+ {#if !gameState.matchEnded}
@@ -127,7 +142,7 @@ {#if matchList.length !== 0} {#each matchList as match} - initGameSpectator(match.gameServerIdOfTheMatch, match.gameOptions)} /> + initGameSpectator(match)} /> {/each} {:else} @@ -195,10 +210,15 @@ canvas { font-size: x-large; padding: 10px; } - #match_list { font-family: 'Courier New', Courier, monospace; font-size: large; } - +.avatar { + min-height: 100px; + min-width: 100px; + + max-width: 100px; + max-height: 100px; +} diff --git a/srcs/requirements/svelte/api_front/src/pages/game/client/init.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/init.ts index 863ebdbd..ba22819a 100644 --- a/srcs/requirements/svelte/api_front/src/pages/game/client/init.ts +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/init.ts @@ -3,7 +3,7 @@ import * as c from "./constants.js" import * as en from "../shared_js/enums.js" import { GameArea } from "./class/GameArea.js"; import { GameComponentsClient } from "./class/GameComponentsClient.js"; -import { socket, resetGameState } from "./ws.js"; +import { socket, gameState } from "./ws.js"; import { initAudio } from "./audio.js"; import type { InitOptions } from "./class/InitOptions.js"; @@ -57,5 +57,5 @@ export function destroyBase() } setGc(null); setMatchOptions(null); - resetGameState(); + gameState.resetGameState(); } diff --git a/srcs/requirements/svelte/api_front/src/pages/game/client/pongSpectator.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/pongSpectator.ts index 0b2fbeea..eb3637b5 100644 --- a/srcs/requirements/svelte/api_front/src/pages/game/client/pongSpectator.ts +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/pongSpectator.ts @@ -8,7 +8,6 @@ import { initBase, destroyBase, computeMatchOptions } from "./init.js"; export { computeMatchOptions } from "./init.js"; export { MatchOptions } from "../shared_js/enums.js" -/* TODO: A way to delay the init of variables, but still use "const" not "let" ? */ import { pong, gc } from "./global.js" import { setStartFunction } from "./global.js" diff --git a/srcs/requirements/svelte/api_front/src/pages/game/client/ws.ts b/srcs/requirements/svelte/api_front/src/pages/game/client/ws.ts index c2d61abf..b3cad96b 100644 --- a/srcs/requirements/svelte/api_front/src/pages/game/client/ws.ts +++ b/srcs/requirements/svelte/api_front/src/pages/game/client/ws.ts @@ -10,16 +10,22 @@ import { muteFlag, soundRoblox } from "./audio.js" import { sleep } from "./utils.js"; import { Vector, VectorInteger } from "../shared_js/class/Vector.js"; -export const gameState = { - matchStarted: false, - matchEnded: false, - matchAborted: false -} - -export function resetGameState() { - gameState.matchStarted = false; - gameState.matchEnded = false; - gameState.matchAborted = false; +class GameState { + matchStarted: boolean; + matchEnded: boolean; + matchAborted: boolean; + playerOneUsername: string; + playerTwoUsername: string; + constructor() { + this.resetGameState(); + } + resetGameState() { + this.matchStarted = false; + this.matchEnded = false; + this.matchAborted = false; + this.playerOneUsername = ""; + this.playerTwoUsername = ""; + } } class ClientInfo { @@ -39,6 +45,7 @@ class ClientInfoSpectator { const wsUrl = "ws://" + process.env.WEBSITE_HOST + ":" + process.env.WEBSITE_PORT + "/pong"; export let socket: WebSocket; +export const gameState = new GameState(); export const clientInfo = new ClientInfo(); export const clientInfoSpectator = new ClientInfoSpectator(); // WIP, could refactor this @@ -85,6 +92,8 @@ function preMatchListener(this: WebSocket, event: MessageEvent) break; case en.EventTypes.matchmakingComplete: clientInfo.side = (data).side; + gameState.playerOneUsername = (data).playerOneUsername; + gameState.playerTwoUsername = (data).playerTwoUsername; if (clientInfo.side === en.PlayerSide.left) { clientInfo.racket = gc.playerLeft; diff --git a/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/Event.ts b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/Event.ts index 0147ead8..e5938e29 100644 --- a/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/Event.ts +++ b/srcs/requirements/svelte/api_front/src/pages/game/shared_js/class/Event.ts @@ -18,10 +18,13 @@ export class EventAssignId extends ServerEvent { } export class EventMatchmakingComplete extends ServerEvent { - side: en.PlayerSide; - constructor(side: en.PlayerSide) { + side: en.PlayerSide = en.PlayerSide.noSide; + playerOneUsername: string; + playerTwoUsername: string; + constructor(playerOneUsername: string, playerTwoUsername: string) { super(en.EventTypes.matchmakingComplete); - this.side = side; + this.playerOneUsername = playerOneUsername; + this.playerTwoUsername = playerTwoUsername; } } diff --git a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileDisplay.svelte b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileDisplay.svelte index c9e805d0..59791b1b 100644 --- a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileDisplay.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileDisplay.svelte @@ -2,7 +2,7 @@ import { onMount } from 'svelte'; import GenerateUserDisplay from '../../pieces/GenerateUserDisplay.svelte'; - + import { push } from 'svelte-spa-router'; import Chat from '../../pieces/chat/Chat.svelte'; @@ -19,13 +19,11 @@ -
- {#if user !== undefined} - + + {:else} -

Sorry

Failed to load current
{/if} @@ -36,140 +34,7 @@ div.outer{ max-width: 960px; margin: 40px auto; - } - -/* The main part */ - main{ - max-width: 960px; - margin: 40px auto; text-align: center; } -/* Normal CSS stuff */ - .avatar{ - max-width: 150px; - /* padding: 5px; */ - } - -/* The variable rich section */ - section.main-stats{ - max-width: 600px; - margin: 40px auto; - text-align: center; - /* i think i want to use a grid? */ - display: grid; - grid-template-columns: repeat(3, 1fr); - /* not sure about this, maybe top should be larger? */ - grid-template-rows: repeat(3, 1fr); - } - -/* the stuff in the grid*/ - section.main-stats h4{ - grid-column: 1 / span 3; - } - - div.username{ - font-size: 1.5em; - font-weight: bold; - padding-bottom: 5px; - } - - div.rank { - /* color: black; */ - font-size: 1.2em; - font-weight: bold; - } - - - /* Glittery Star Stuff */ - - - :root { - --purple: rgb(123, 31, 162); - --violet: rgb(103, 58, 183); - --pink: rgb(244, 143, 177); - /* make shit gold? */ - } - - @keyframes background-pan { - from { - background-position: 0% center; - } - - to { - background-position: -200% center; - } - } - - @keyframes scale { - from, to { - transform: scale(0); - } - - 50% { - transform: scale(1); - } - } - - @keyframes rotate { - from { - transform: rotate(0deg); - } - - to { - transform: rotate(180deg); - } - } - - - div > .glitter { - display: inline-block; - position: relative; - } - - div > .glitter > .glitter-star { - --size: clamp(20px, 1.5vw, 30px); - - animation: scale 700ms ease forwards; - display: block; - height: var(--size); - left: var(--star-left); - position: absolute; - top: var(--star-top); - width: var(--size); - } - - div > .glitter > .glitter-star > svg { - animation: rotate 1000ms linear infinite; - display: block; - opacity: 0.7; - } - - div > .glitter > .glitter-star > svg > path { - fill: var(--violet); - } - - div > .glitter > .glitter-text { - animation: background-pan 3s linear infinite; - /* background-image: linear-gradient( */ - background: linear-gradient( - to right, - var(--purple), - var(--violet), - var(--pink), - var(--purple) - ); - background-size: 200%; - - /* Keep these for Safari and chrome */ - -webkit-background-clip: text; - -webkit-text-fill-color: transparent; - - /* These are for Firefox */ - background-clip: text; - color: transparent; - - white-space: nowrap; - } - diff --git a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileFriends.svelte b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileFriends.svelte index 472540dd..71c780c6 100644 --- a/srcs/requirements/svelte/api_front/src/pages/profile/ProfileFriends.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/profile/ProfileFriends.svelte @@ -177,7 +177,7 @@ console.log('Block a non friend user, their username') console.log(aUsername) - sentFriendRequest = await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/network/relations`, { + let sentFriendRequest = await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/network/relations`, { method : "POST", headers: { 'Content-Type': 'application/json'}, body: JSON.stringify({ diff --git a/srcs/requirements/svelte/api_front/src/pages/profile/ProfilePage.svelte b/srcs/requirements/svelte/api_front/src/pages/profile/ProfilePage.svelte index 3a6825c8..e227d3ca 100644 --- a/srcs/requirements/svelte/api_front/src/pages/profile/ProfilePage.svelte +++ b/srcs/requirements/svelte/api_front/src/pages/profile/ProfilePage.svelte @@ -1,5 +1,4 @@ diff --git a/srcs/requirements/svelte/api_front/src/pieces/DisplayAUser.svelte b/srcs/requirements/svelte/api_front/src/pieces/DisplayAUser.svelte index 65a9da14..7b5c01be 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/DisplayAUser.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/DisplayAUser.svelte @@ -39,8 +39,7 @@ {#if user !== undefined} - - + {:else}

Sorry

Failed to load user {aUsername}
diff --git a/srcs/requirements/svelte/api_front/src/pieces/GenerateUserDisplay.svelte b/srcs/requirements/svelte/api_front/src/pieces/GenerateUserDisplay.svelte index 4c33e9f7..dbb58624 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/GenerateUserDisplay.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/GenerateUserDisplay.svelte @@ -2,9 +2,9 @@ import { onMount } from 'svelte'; + import { fetchAvatar } from "./utils"; export let user; - export let primary; // kinda useless, not sure what i was going for... Might be userful after all let rank = ''; let avatar; // avatar needs to be updated!!! @@ -12,28 +12,10 @@ // add errors let errors = {avatar: ''}; - onMount( async() => { - // console.log('Generate User Display, on mount ' + user.username) - if (primary) { - await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/user/avatar`, {method: "GET"}) - .then(response => {return response.blob()}) - .then(data => { - const url = URL.createObjectURL(data); - avatar = url; - }) - .catch(() => errors.avatar = 'Sorry your avatar could not be loaded' ); - // console.log('avatar: ') - // console.log(avatar) - } else { - await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/user/avatar?username=${user.username}`, {method: "GET"}) - .then(response => {return response.blob()}) - .then(data => { - const url = URL.createObjectURL(data); - avatar = url; - }) - .catch(() => errors.avatar = 'Sorry your avatar could not be loaded' ); - } - }) + onMount( async() => { + // console.log('Generate User Display, on mount ' + user.username) + avatar = await fetchAvatar(user.username); + }) /**** THIS IS BASICALLY ALL THE RANK LOGIC ERIC HAS MADE ****/ diff --git a/srcs/requirements/svelte/api_front/src/pieces/Header.svelte b/srcs/requirements/svelte/api_front/src/pieces/Header.svelte index aa929919..51fa34ef 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/Header.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/Header.svelte @@ -3,9 +3,11 @@ import { location } from 'svelte-spa-router'; + // no need, it's just for links import active from 'svelte-spa-router/active' // or i could leave them all and not display if they're active? + $: current = $location; let handleClickLogout = async () => { await fetch(`http://${process.env.WEBSITE_HOST}:${process.env.WEBSITE_PORT}/api/v2/auth/logout`, { @@ -23,16 +25,13 @@ Potato Pong Logo (push('/'))}>

Potato Pong

@@ -54,6 +53,13 @@ } + .selected { + background-color: chocolate; + text-decoration: underline; + /* TMP so it's obvious but we need to pick good colors */ + } + + /* There is a bunch of unncessary shit in here... why so many flex grids, why is everything the same class? just seemed easier but... */ diff --git a/srcs/requirements/svelte/api_front/src/pieces/Match.ts b/srcs/requirements/svelte/api_front/src/pieces/Match.ts new file mode 100644 index 00000000..68e330f6 --- /dev/null +++ b/srcs/requirements/svelte/api_front/src/pieces/Match.ts @@ -0,0 +1,10 @@ + +import type { MatchOptions } from "../pages/game/client/pongSpectator"; +export { MatchOptions } from "../pages/game/client/pongSpectator"; + +export class Match { + gameServerIdOfTheMatch: string; + gameOptions: MatchOptions; + playerOneUsername: string; + playerTwoUsername: string; +} diff --git a/srcs/requirements/svelte/api_front/src/pieces/MatchListElem.svelte b/srcs/requirements/svelte/api_front/src/pieces/MatchListElem.svelte index 5433c23e..29fbaa52 100644 --- a/srcs/requirements/svelte/api_front/src/pieces/MatchListElem.svelte +++ b/srcs/requirements/svelte/api_front/src/pieces/MatchListElem.svelte @@ -1,14 +1,9 @@