diff --git a/src/client/message.ts b/src/client/message.ts new file mode 100644 index 00000000..5c1cdc15 --- /dev/null +++ b/src/client/message.ts @@ -0,0 +1,80 @@ + +import * as c from "./constants.js" +import { gc } from "./global.js" +import * as en from "../shared_js/enums.js" + +/* + before game +*/ +export function matchmaking() +{ + const text = "searching..."; + console.log(text); + gc.text1.clear(); + gc.text1.pos.assign(c.w*0.2, c.h*0.5); + gc.text1.text = text; + gc.text1.update(); +} + +export function matchmakingComplete() +{ + const text = "match found !"; + console.log(text); + gc.text1.clear(); + gc.text1.pos.assign(c.w*0.15, c.h*0.5); + gc.text1.text = text; + gc.text1.update(); +} + +export function matchAbort() +{ + const text = "match abort"; + console.log(text); + gc.text1.clear(); + gc.text1.pos.assign(c.w*0.15, c.h*0.5); + gc.text1.text = text; + gc.text1.update(); + + setTimeout(() => { + gc.text2.pos.assign(c.w*0.44, c.h*0.6); + gc.text2.text = "pardon =("; + const oriSize = gc.text2.size; + gc.text2.size = c.w*0.025; + gc.text2.update(); + gc.text2.size = oriSize; + }, 2500); +} + + +/* + in game +*/ +export function win() +{ + gc.text1.pos.assign(c.w*0.415, c.h*0.5); + gc.text1.text = "WIN"; +} + +export function lose() +{ + gc.text1.pos.assign(c.w*0.383, c.h*0.5); + gc.text1.text = "LOSE"; +} + +export function forfeit(playerSide: en.PlayerSide) +{ + if (playerSide === en.PlayerSide.left) { + gc.text2.pos.assign(c.w*0.65, c.h*0.42); + gc.text3.pos.assign(c.w*0.65, c.h*0.52); + } + else { + gc.text2.pos.assign(c.w*0.09, c.h*0.42); + gc.text3.pos.assign(c.w*0.09, c.h*0.52); + } + setTimeout(() => { + gc.text2.text = "par forfait"; + }, 1500); + setTimeout(() => { + gc.text3.text = "calme ta joie"; + }, 3500); +} diff --git a/src/client/pong.ts b/src/client/pong.ts index 52414153..a66dc9d5 100644 --- a/src/client/pong.ts +++ b/src/client/pong.ts @@ -49,56 +49,17 @@ function init() initWebSocket(matchOptions); } -function matchmaking() -{ - const text = "searching..."; - console.log(text); - gc.text1.clear(); - gc.text1.pos.assign(c.w*0.2, c.h*0.5); - gc.text1.text = text; - gc.text1.update(); -} - -function matchmakingComplete() -{ - const text = "match found !"; - console.log(text); - gc.text1.clear(); - gc.text1.pos.assign(c.w*0.15, c.h*0.5); - gc.text1.text = text; - gc.text1.update(); -} - -function matchAbort() -{ - const text = "match abort"; - console.log(text); - gc.text1.clear(); - gc.text1.pos.assign(c.w*0.15, c.h*0.5); - gc.text1.text = text; - gc.text1.update(); - - setTimeout(() => { - gc.text2.pos.assign(c.w*0.44, c.h*0.6); - gc.text2.text = "pardon =("; - const oriSize = gc.text2.size; - gc.text2.size = c.w*0.025; - gc.text2.update(); - gc.text2.size = oriSize; - }, 3000); -} - -function matchStart() +export function start() { gc.text1.pos.assign(c.w*0.5, c.h*0.75); countdown(c.matchStartDelay/1000, (count: number) => { gc.text1.clear(); gc.text1.text = `${count}`; gc.text1.update(); - }, matchResume); + }, resume); } -function matchResume() +function resume() { gc.text1.text = ""; window.addEventListener('keydown', function (e) { @@ -112,6 +73,3 @@ function matchResume() pong.gameLoopInterval = window.setInterval(gameLoop, c.gameLoopIntervalMS); pong.drawLoopInterval = window.setInterval(drawLoop, c.drawLoopIntervalMS); } - - -export {matchmaking, matchmakingComplete, matchAbort, matchStart} diff --git a/src/client/ws.ts b/src/client/ws.ts index 6d589082..ca3a1227 100644 --- a/src/client/ws.ts +++ b/src/client/ws.ts @@ -3,7 +3,8 @@ import * as c from "./constants.js" import { gc, matchOptions } from "./global.js" import * as ev from "../shared_js/class/Event.js" import * as en from "../shared_js/enums.js" -import { matchmaking, matchmakingComplete, matchAbort, matchStart } from "./pong.js"; +import * as msg from "./message.js"; +import { start } from "./pong.js"; import { RacketClient } from "./class/RectangleClient.js"; import { repeatInput } from "./handleInput.js"; import { soundRoblox } from "./audio.js" @@ -45,7 +46,7 @@ function preMatchListener(this: WebSocket, event: MessageEvent) clientInfo.id = (data).id; break; case en.EventTypes.matchmakingInProgress: - matchmaking(); + msg.matchmaking(); break; case en.EventTypes.matchmakingComplete: clientInfo.side = (data).side; @@ -62,16 +63,16 @@ function preMatchListener(this: WebSocket, event: MessageEvent) clientInfo.opponentNextPos = new VectorInteger(clientInfo.opponent.pos.x, clientInfo.opponent.pos.y); clientInfo.racket.color = "darkgreen"; // for testing purpose socket.send(JSON.stringify( new ev.ClientEvent(en.EventTypes.clientPlayerReady) )); // TODO: set an interval/timeout to resend until matchStart response (in case of network problem) - matchmakingComplete(); + msg.matchmakingComplete(); break; case en.EventTypes.matchStart: socket.removeEventListener("message", preMatchListener); socket.addEventListener("message", inGameListener); - matchStart(); + start(); break; case en.EventTypes.matchAbort: socket.removeEventListener("message", preMatchListener); - matchAbort(); + msg.matchAbort(); break; } } @@ -173,28 +174,13 @@ function scoreUpdate(data: ev.EventScoreUpdate) function matchEnd(data: ev.EventMatchEnd) { if (data.winner === clientInfo.side) { - gc.text1.pos.assign(c.w*0.415, c.h*0.5); - gc.text1.text = "WIN"; + msg.win(); if (data.forfeit) { - if (clientInfo.side === en.PlayerSide.left) { - gc.text2.pos.assign(c.w*0.65, c.h*0.42); - gc.text3.pos.assign(c.w*0.65, c.h*0.52); - } - else { - gc.text2.pos.assign(c.w*0.09, c.h*0.42); - gc.text3.pos.assign(c.w*0.09, c.h*0.52); - } - setTimeout(() => { - gc.text2.text = "par forfait"; - }, 2500); - setTimeout(() => { - gc.text3.text = "calme ta joie"; - }, 5000); + msg.forfeit(clientInfo.side); } } else { - gc.text1.pos.assign(c.w*0.383, c.h*0.5); - gc.text1.text = "LOSE"; + msg.lose(); } // matchEnded = true; // unused }