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
+4 -1
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.
+11 -9
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;
}
-1
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
+3 -3
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;
+21 -16
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">
+13 -5
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;
} }