160 lines
5.6 KiB
HTML
160 lines
5.6 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
|
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.10.4/font/bootstrap-icons.css">
|
|
<script async src="https://unpkg.com/es-module-shims@1.6.3/dist/es-module-shims.js"></script>
|
|
<script type="importmap">
|
|
{
|
|
"imports": {
|
|
"three": "https://unpkg.com/three@0.152.2/build/three.module.js?module",
|
|
"three/addons/": "https://unpkg.com/three@0.152.2/examples/jsm/"
|
|
}
|
|
}
|
|
</script>
|
|
<style>
|
|
body {
|
|
background: url(https://adrien.malingrey.fr/jeux/.assets/themes/clouds/background.jpg);
|
|
}
|
|
.lil-gui {
|
|
--background-color: rgba(33, 37, 41, 30%);
|
|
backdrop-filter: blur(15px);
|
|
}
|
|
.lil-gui.autoPlace {
|
|
left: 15px;
|
|
}
|
|
.lil-gui .controller.disabled {
|
|
opacity: .8;
|
|
}
|
|
i {
|
|
display: inline-block;
|
|
width: 100%;
|
|
text-align: center;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<script type="module">
|
|
import { GUI } from 'three/addons/libs/lil-gui.module.min.js';
|
|
|
|
var game = {
|
|
startLevel: 1,
|
|
start: () => {
|
|
gui.gameFolder.hide()
|
|
gui.statsFolder.show()
|
|
gui.statsFolder.open()
|
|
gui.settingsFolder.close()
|
|
},
|
|
}
|
|
|
|
var stats = {
|
|
level: 1,
|
|
goal: 0,
|
|
score: 0,
|
|
highScore:0,
|
|
time: "00:00:00",
|
|
}
|
|
|
|
var settings = {
|
|
moveLeftKey : "ArrowLeft",
|
|
moveRightKey: "ArrowRight",
|
|
rotateCCWKey: "w",
|
|
rotateCWKey : "ArrowUp",
|
|
softDropKey : "ArrowDown",
|
|
hardDropKey : " ",
|
|
holdKey : "c",
|
|
pauseKey : "Escape",
|
|
|
|
arrDelay: 50,
|
|
dasDelay: 300,
|
|
|
|
musicVolume: 50,
|
|
sfxVolume : 50,
|
|
};
|
|
|
|
const KEY_NAMES = {
|
|
["ArrowLeft"] : "←",
|
|
["ArrowRight"] : "→",
|
|
["ArrowUp"] : "↑",
|
|
["ArrowDown"] : "↓",
|
|
[" "] : "Espace",
|
|
["Escape"] : "Échap.",
|
|
["Backspace"] : "Ret. arrière",
|
|
["Enter"] : "Entrée",
|
|
["←"] : "ArrowLeft",
|
|
["→"] : "ArrowRight",
|
|
["↑"] : "ArrowUp",
|
|
["↓"] : "ArrowDown",
|
|
["Espace"] : " ",
|
|
["Échap."] : "Escape",
|
|
["Ret. arrière"]: "Backspace",
|
|
["Entrée"] : "Enter",
|
|
}
|
|
|
|
function changeKey(event) {
|
|
const input = event.target
|
|
let prevValue = input.value
|
|
input.value = ""
|
|
input.onkeydown = function (event) {
|
|
event.preventDefault()
|
|
input.value = KEY_NAMES[event.key] || event.key
|
|
input.blur()
|
|
}
|
|
input.onblur = function (event) {
|
|
if (input.value == "") input.value = prevValue
|
|
input.onkeydown = null
|
|
input.onblur = null
|
|
}
|
|
}
|
|
|
|
class Gui extends GUI {
|
|
constructor() {
|
|
super({title: "teTra"});
|
|
|
|
this.gameFolder = this.addFolder("Partie")
|
|
this.gameFolder.add(game, "startLevel").name("Niveau").min(1).max(15).step(1)
|
|
this.gameFolder.add(game, "start").name("Commencer")
|
|
this.gameFolder.open()
|
|
|
|
this.statsFolder = this.addFolder("Stats")
|
|
this.statsFolder.add(stats,"level").name("Niveau").disable()
|
|
this.statsFolder.add(stats,"goal").name("Objectif").disable()
|
|
this.statsFolder.add(stats,"score").name("Score").disable()
|
|
this.statsFolder.add(stats,"highScore").name("Meilleur score").disable()
|
|
this.statsFolder.add(stats,"time").name("Temps").disable()
|
|
this.statsFolder.hide()
|
|
|
|
this.settingsFolder = this.addFolder("Options");
|
|
this.settingsFolder.close()
|
|
|
|
this.settingsFolder.keyMapping = this.settingsFolder.addFolder("Commandes")
|
|
this.settingsFolder.keyMapping.add(settings,"moveLeftKey").name('<i class="bi bi-arrow-left"></i>').domElement.onclick = changeKey
|
|
this.settingsFolder.keyMapping.add(settings,"moveRightKey").name('<i class="bi bi-arrow-right"></i>').domElement.onclick = changeKey
|
|
this.settingsFolder.keyMapping.add(settings,"rotateCCWKey").name('<i class="bi bi-arrow-counterclockwise"></i>').domElement.onclick = changeKey
|
|
this.settingsFolder.keyMapping.add(settings,"rotateCWKey").name('<i class="bi bi-arrow-clockwise"></i>').domElement.onclick = changeKey
|
|
this.settingsFolder.keyMapping.add(settings,"softDropKey").name('<i class="bi bi-arrow-down-short"></i>').domElement.onclick = changeKey
|
|
this.settingsFolder.keyMapping.add(settings,"hardDropKey").name('<i class="bi bi-download"></i>').domElement.onclick = changeKey
|
|
this.settingsFolder.keyMapping.add(settings,"holdKey").name('<i class="bi bi-arrow-left-right"></i>').domElement.onclick = changeKey
|
|
this.settingsFolder.keyMapping.add(settings,"pauseKey").name('<i class="bi bi-pause"></i>').domElement.onclick = changeKey
|
|
this.settingsFolder.keyMapping.open()
|
|
|
|
this.settingsFolder.delayFolder = this.settingsFolder.addFolder("Répétition automatique")
|
|
this.settingsFolder.delayFolder.add(settings,"arrDelay").name("ARR (ms)").min(2).max(200);
|
|
this.settingsFolder.delayFolder.add(settings,"dasDelay").name("DAS (ms)").min(100).max(500).step(5);
|
|
this.settingsFolder.delayFolder.open()
|
|
|
|
this.settingsFolder.volumeFolder = this.settingsFolder.addFolder("Volume")
|
|
this.settingsFolder.volumeFolder.add(settings,"musicVolume").name("Musique").min(0).max(100);
|
|
this.settingsFolder.volumeFolder.add(settings,"sfxVolume").name("SFX").min(0).max(100)
|
|
this.settingsFolder.volumeFolder.open()
|
|
|
|
}
|
|
}
|
|
|
|
var gui = new Gui();
|
|
|
|
</script>
|
|
</body>
|
|
</html>
|