HTML sound selector
This commit is contained in:
5
memo.txt
5
memo.txt
@@ -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.
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
@@ -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,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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user