TODO: - mode spectateur - certaines utilisations de Math.floor() superflu ? Vérifier les appels. (éventuellement Math.round() ?) - un autre mode de jeu alternatif ? - changer les "localhost:8080" dans le code. Done: - Connexion client/serveur via un Websocket - implémentation basique (authoritative server) - Matchmaking - client prediction - server reconciliation (buffer des inputs côté client + id sur les inputs) - amélioration collision avec Hugo - du son (rebonds de la balle, "Oof" de Roblox sur un point) - init de GameComponents partagé entre serveur et client. - draw on the canvas "WIN", "LOSE", "MATCHMAKING COMPLETE", ... - interpolation (mis à jour progressif des mouvements de l'adversaire) - traitement groupé des inputs clients toutes les x millisecondes (BUG désynchronisation: revenu à un traitement immédiat en attendant) - Détruire les GameSession une fois finies. - mode multi-balles - mode murs mouvant (la zone de jeu rétréci / agrandi en continu) - Selection des modes de jeu via HTML - Selection audio on/off via HTML - Match Abort si tout les joueurs n'ont pas répondus assez vite (5 secondes) - lors d'un newRound() verifier si tout les joueurs sont encore en ligne et stopper le match sinon (victoire si encore un joueur en ligne, annulation du match si aucun joueur en ligne) ----------- BUG: - Si la balle va très vite, elle peut ignorer la collision avec une raquette ou mur. la collision est testée seulement après le mouvement. Pour éviter ce bug il faudrait diviser le mouvement pour faire plusieurs tests de collision successifs. - Sur un changement de fenêtre, les touches restent enfoncées et il faut les "décoincer" en réappuyant. Ce n'est pas grave mais peut-on faire mieux ? ---------- OSEF, rebuts: - idées modes de jeu : - mode 2 raquettes (un joueur haut/gauche et bas/droite) - skin patate ??? - (prediction de l'avancement de la balle basé sur la latence serveur ?) - d'autres sons (foule qui applaudi/musique de victoire) - reconnection - amélioration du protocole, remplacement du JSON (compression. moins de bande passante). - sélection couleur des raquettes (your color/opponent color) dans le profil utilisateur. Enregistrement dans la DB. init des couleurs dans GameComponentsClient() basé sur les variables de l'utilsateur connecté.