<!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>