Загрузка данных


const canvas = document.getElementById("renderCanvas");
const engine = new BABYLON.Engine(canvas, true);
let scene, camera, player, coinA, coinB, score = 0, keys = {};

function make() {
  scene = new BABYLON.Scene(engine);
  camera = new BABYLON.ArcRotateCamera("camera", 0, 1.2, 18, BABYLON.Vector3.Zero(), scene);
  camera.attachControl(canvas, true);
  new BABYLON.HemisphericLight("light", new BABYLON.Vector3(0, 1, 0), scene);
  BABYLON.MeshBuilder.CreateGround("ground", { width: 20, height: 20 }, scene);

  player = BABYLON.MeshBuilder.CreateBox("player", { size: 1.5 }, scene);
  player.position.y = 0.75;

  coinA = BABYLON.MeshBuilder.CreateSphere("coinA", { diameter: 1 }, scene);
  coinA.position.set(4, 0.5, 4);

  coinB = BABYLON.MeshBuilder.CreateSphere("coinB", { diameter: 1 }, scene);
  coinB.position.set(-4, 0.5, -4);

  window.addEventListener("keydown", e => keys[e.key] = true);
  window.addEventListener("keyup", e => keys[e.key] = false);

  scene.onBeforeRenderObservable.add(() => {

    if (keys["w"]) player.position.z += 0.1;
    if (keys["s"]) player.position.z -= 0.1;
    if (keys["a"]) player.position.x -= 0.1;
    if (keys["d"]) player.position.x += 0.1;

    if (player.position.x > 7) player.position.x = 7;
    if (player.position.x < -7) player.position.x = -7;
    if (player.position.z > 7) player.position.z = 7;
    if (player.position.z < -7) player.position.z = -7;

    coinA.rotation.y += 0.03;
    coinB.rotation.y += 0.03;

    if (player.intersectsMesh(coinA, false)) { coinA.position.x = Math.random() * 10 - 5; coinA.position.z = Math.random() * 10 - 5; score += 10; document.title = "Score: " + score; }
    if (player.intersectsMesh(coinB, false)) { coinB.position.x = Math.random() * 10 - 5; coinB.position.z = Math.random() * 10 - 5; score += 10; document.title = "Score: " + score; }
  });

  return scene;
}

make();
engine.runRenderLoop(() => scene.render());
window.addEventListener("resize", () => engine.resize());