Source: game1.js

/**
 * @file A simple arcade game translated to JavaScript from a
 * [Python Mooc]{@link https://www.coursera.org/learn/interactive-python-1} given by Rice University.
 * @author Robert Laing
 * @requires rice-rocks.js
 */

/**
 * The thing that freezes Jasmine to make this untestable
 * @function animationLoop
 * @returns {undefined} Never returning infinite loop
 */
function animationLoop() {
  clearScene();
  drawState();
  playSound();
  updateState();
  window.requestAnimationFrame(animationLoop);
}

function setup(event) {
  initState();
  resizeListener(null);
  window.requestAnimationFrame(animationLoop);
}

function cleanup(event) {
  playSound("thrustStop");
  playSound("backgroundStop");
}

fetch("ricerocks.json")
.then(response => response.json())
.then(data => {
  Object.keys(data.images).forEach(img => {
    images[img] = new Promise((resolve, reject) => {
      let image = new Image();
      image.src = data.images[img];
      image.addEventListener("load", () => resolve(image));
    });
  });
  Object.keys(data.sounds).forEach(sound => {
    sounds[sound] = audioCtx.createBufferSource(); // is already a promise
    loadSound(data.sounds[sound], sounds[sound]);
  });
});

window.addEventListener("DOMContentLoaded", setup);
window.addEventListener("unload", cleanup);
window.addEventListener("resize", resizeListener);
document.addEventListener("keydown", uiListener);
document.addEventListener("keyup", uiListener);
document.querySelector("#upButton").addEventListener("pointerdown", uiListener);
document.querySelector("#upButton").addEventListener("pointerup", uiListener);
document.querySelector("#leftButton").addEventListener("pointerdown", uiListener);
document.querySelector("#leftButton").addEventListener("pointerup", uiListener);
document.querySelector("#rightButton").addEventListener("pointerdown", uiListener);
document.querySelector("#rightButton").addEventListener("pointerup", uiListener);
document.querySelector("#spaceBar").addEventListener("pointerdown", uiListener);
document.querySelector("#spaceBar").addEventListener("pointerup", uiListener);