HTML sound selector

This commit is contained in:
LuckyLaszlo
2022-12-06 03:53:44 +01:00
parent 9dde821f67
commit 4be38c59e8
6 changed files with 54 additions and 37 deletions

View File

@@ -5,7 +5,7 @@ Done:
- client prediction - client prediction
- server reconciliation (buffer des inputs côté client + id sur les inputs) - server reconciliation (buffer des inputs côté client + id sur les inputs)
- amélioration collision avec Hugo - amélioration collision avec Hugo
- du son (balle, foule qui applaudi/musique de victoire) (son de la raquette "Oof" de Roblox ? 🤡) - du son (rebonds de la balle, "Oof" de Roblox sur un point)
- init de GameComponents partagé entre serveur et client. - init de GameComponents partagé entre serveur et client.
- draw on the canvas "WIN", "LOSE", "MATCHMAKING COMPLETE", ... - draw on the canvas "WIN", "LOSE", "MATCHMAKING COMPLETE", ...
- interpolation (mis à jour progressif des mouvements de l'adversaire) - interpolation (mis à jour progressif des mouvements de l'adversaire)
@@ -15,6 +15,7 @@ Done:
- mode multi-balles - mode multi-balles
- mode murs mouvant (la zone de jeu rétréci / agrandi en continu) - mode murs mouvant (la zone de jeu rétréci / agrandi en continu)
- Selection des modes de jeu via HTML - Selection des modes de jeu via HTML
- Selection audio on/off via HTML
TODO: TODO:
- Match Abort si tout les joueurs ne sont pas pret assez vite (~15 secondes) - Match Abort si tout les joueurs ne sont pas pret assez vite (~15 secondes)
@@ -22,11 +23,13 @@ TODO:
- certaines utilisations de Math.floor() superflu ? Vérifier les appels. - certaines utilisations de Math.floor() superflu ? Vérifier les appels.
(éventuellement Math.round() ?) (éventuellement Math.round() ?)
- un autre mode de jeu alternatif ? - un autre mode de jeu alternatif ?
- changer les "localhost:8080" dans le code.
----------- -----------
idées modes de jeu : idées modes de jeu :
- mode 2 raquettes (un joueur haut/gauche et bas/droite) - mode 2 raquettes (un joueur haut/gauche et bas/droite)
- skin patate ??? - skin patate ???
- (prediction de l'avancement de la balle basé sur la latence serveur ?) - (prediction de l'avancement de la balle basé sur la latence serveur ?)
- d'autres sons (foule qui applaudi/musique de victoire)
----------- -----------
- BUG: Si la balle va très vite, elle peut ignorer la collision avec une raquette ou mur. - 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. la collision est testée seulement après le mouvement.

View File

@@ -2,13 +2,15 @@
import * as c from "./constants.js" import * as c from "./constants.js"
export const soundPongArr: HTMLAudioElement[] = []; export const soundPongArr: HTMLAudioElement[] = [];
for (let i = 0; i <= 32; i++) {
soundPongArr.push(new Audio("http://localhost:8080/sound/pong/"+i+".mp3"));
soundPongArr[i].volume = c.soundPongVolume;
soundPongArr[i].muted = c.soundMutedFlag;
}
export const soundRoblox = new Audio("http://localhost:8080/sound/roblox-oof.mp3"); export const soundRoblox = new Audio("http://localhost:8080/sound/roblox-oof.mp3");
soundRoblox.volume = c.soundRobloxVolume;
soundRoblox.muted = c.soundMutedFlag; export function initAudio(muteFlag: boolean)
{
for (let i = 0; i <= 32; i++) {
soundPongArr.push(new Audio("http://localhost:8080/sound/pong/"+i+".mp3"));
soundPongArr[i].volume = c.soundPongVolume;
soundPongArr[i].muted = muteFlag;
}
soundRoblox.volume = c.soundRobloxVolume;
soundRoblox.muted = muteFlag;
}

View File

@@ -14,6 +14,5 @@ export const drawLoopIntervalMS = 15; // millisecond
export const fixedDeltaTime = gameLoopIntervalMS/1000; // second export const fixedDeltaTime = gameLoopIntervalMS/1000; // second
export const soundMutedFlag = true; // TODO: Radio selector on website
export const soundRobloxVolume = 0.3; // between 0 and 1 export const soundRobloxVolume = 0.3; // between 0 and 1
export const soundPongVolume = 0.3; // between 0 and 1 export const soundPongVolume = 0.3; // between 0 and 1

View File

@@ -20,14 +20,14 @@ body {
} }
#canvas_container { #canvas_container {
text-align: center; text-align: center;
/* border: dashed white 5px; */ /* border: dashed rgb(245, 245, 245) 5px; */
/* max-height: 80vh; */ /* max-height: 80vh; */
/* overflow: hidden; */ /* overflow: hidden; */
} }
#div_game_options { #div_game_options {
text-align: center; text-align: center;
font-family: "Bit5x3"; font-family: "Bit5x3";
color: white; color: rgb(245, 245, 245);
font-size: x-large; font-size: x-large;
} }
#div_game_options fieldset { #div_game_options fieldset {
@@ -40,7 +40,7 @@ body {
} }
#play_pong_button { #play_pong_button {
font-family: "Bit5x3"; font-family: "Bit5x3";
color: white; color: rgb(245, 245, 245);
background-color: #333333; background-color: #333333;
font-size: x-large; font-size: x-large;
padding: 10px; padding: 10px;

View File

@@ -9,22 +9,27 @@
<div id="preload_font">.</div> <div id="preload_font">.</div>
<div id="div_game_options"> <div id="div_game_options">
<fieldset> <fieldset>
<legend>Game options</legend> <legend>game options</legend>
<div> <div>
<input type="checkbox" id="multiBalls" name="multiBalls"> <input type="checkbox" id="multi_balls" name="multi_balls">
<label for="multiBalls">Multiples balls</label> <label for="multi_balls">multiples balls</label>
</div> </div>
<div>
<div> <input type="checkbox" id="moving_walls" name="moving_walls">
<input type="checkbox" id="movingWalls" name="movingWalls"> <label for="moving_walls">moving walls</label>
<label for="movingWalls">Moving walls</label> </div>
</div> <div>
<label>sound :</label>
<div> <input type="radio" id="sound_on" name="sound_selector" value="on" checked>
<button id="play_pong_button">Play</button> <label for="sound_on">on</label>
</div> <input type="radio" id="sound_off" name="sound_selector" value="off">
</fieldset> <label for="sound_off">off</label>
</div>
<div>
<button id="play_pong_button">PLAY</button>
</div>
</fieldset>
</div> </div>
<div id="canvas_container"> <div id="canvas_container">

View File

@@ -13,7 +13,8 @@ import { handleInput } from "./handleInput.js";
import { gameLoop } from "./gameLoop.js" import { gameLoop } from "./gameLoop.js"
import { drawLoop } from "./draw.js"; import { drawLoop } from "./draw.js";
import { countdown } from "./utils.js"; import { countdown } from "./utils.js";
import {initWebSocket} from "./ws.js"; import { initWebSocket } from "./ws.js";
import { initAudio } from "./audio.js";
/* Keys /* Keys
@@ -28,13 +29,20 @@ export let matchOptions: en.MatchOptions = en.MatchOptions.noOption;
function init() function init()
{ {
console.log("multiBalls:"+(<HTMLInputElement>document.getElementById("multiBalls")).checked); console.log("multi_balls:"+(<HTMLInputElement>document.getElementById("multi_balls")).checked);
console.log("movingWalls:"+(<HTMLInputElement>document.getElementById("movingWalls")).checked); console.log("moving_walls:"+(<HTMLInputElement>document.getElementById("moving_walls")).checked);
console.log("sound_on:"+(<HTMLInputElement>document.getElementById("sound_on")).checked);
if ( (<HTMLInputElement>document.getElementById("multiBalls")).checked ) { let soundMutedFlag = false;
if ( (<HTMLInputElement>document.getElementById("sound_off")).checked ) {
soundMutedFlag = true;
}
initAudio(soundMutedFlag);
if ( (<HTMLInputElement>document.getElementById("multi_balls")).checked ) {
matchOptions |= en.MatchOptions.multiBalls; matchOptions |= en.MatchOptions.multiBalls;
} }
if ( (<HTMLInputElement>document.getElementById("movingWalls")).checked ) { if ( (<HTMLInputElement>document.getElementById("moving_walls")).checked ) {
matchOptions |= en.MatchOptions.movingWalls; matchOptions |= en.MatchOptions.movingWalls;
} }