{"mappings":"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","sources":["src/collision.ts","src/vec2.ts","src/index.ts","src/camera.ts","src/rect.ts","src/canvas.ts","src/dom.ts","src/ecs.ts","src/emitter.ts","src/game.ts","src/inputs.ts","src/mappings.ts","src/loader.ts","src/utils.ts","src/sound.ts","src/sprite.ts","src/stage.ts","src/store.ts"],"sourcesContent":["/* collision.ts */\n\nimport { Vec2 } from \"./vec2\";\nimport { Rect } from \"./rect\";\n\nconst { abs } = Math;\n\nexport enum CollisionSide {\n  NONE = \"\",\n  LEFT = \"left\",\n  RIGHT = \"right\",\n  TOP = \"top\",\n  BOTTOM = \"bottom\",\n}\n\n/**\n * circle in circle collision detection\n * @param {Vec2} c1 - center of first circle\n * @param {number} r1 - radius of first circle\n * @param {Vec2} c2 - center of second circle\n * @param {number} r2 - radius of second circle\n * @return {boolean} true if circles are overlapping\n */\nexport function circleInCircle(c1: Vec2, r1: number, c2: Vec2, r2: number) {\n  const s = r1 + r2;\n  return c1.distance2(c2) <= s * s;\n}\n\n/**\n * point in circle collision check\n * @param {Vec2} p - point\n * @param {Vec2} c - center of circle\n * @param {number} cr - radius of circle\n * @return {boolean} true if point is inside circle\n */\nexport function pointInCircle(p: Vec2, c: Vec2, r: number) {\n  return p.distance2(c) <= r * r;\n}\n\n/**\n * AABB rectangle in rectangle overlap detection\n * @param {Rect} r1 - left side of first rectangle\n * @param {Rect} r2 - top side of first rectangle\n */\nexport function rectInRect(r1: Rect, r2: Rect) {\n  return !(\n    r2.x >= r1.x + r1.w ||\n    r2.x + r2.w <= r1.x ||\n    r2.y >= r1.y + r1.h ||\n    r2.y + r2.h <= r1.y\n  );\n}\n\n/**\n * point in rectangle check detection\n * @param {Vec2} p - point\n * @param {Rect} r - rectangle\n */\nexport function pointInRect(p: Vec2, r: Rect) {\n  return p.x <= r.x && p.x <= r.x + r.w && r.y <= p.y && p.y <= r.y + r.h;\n}\n\n/**\n * Circle in Rectangle collision detection\n * @param {number} center of circle\n * @param {number} radius of the circle\n * @param {number} r rectangle\n * @returns {boolean}\n */\nexport function circleInRect(c: Vec2, radius: number, r: Rect) {\n  const { x: left, y: top } = r.topleft;\n  const { x: right, y: bottom } = r.bottomright;\n\n  return (\n    !(\n      // AABB/AABB\n      (\n        c.x + radius <= left ||\n        c.x - radius >= right ||\n        c.y + radius <= top ||\n        c.y - radius >= bottom\n      )\n    ) &&\n    // one of the rectangle vertices is in the circle\n    (this.pointInCircle(r.topleft, c, radius) ||\n      this.pointInCircle(r.bottomleft, c, radius) ||\n      this.pointInCircle(r.topright, c, radius) ||\n      this.pointInCircle(r.bottomright, c, radius) ||\n      // the center is in the rectangle\n      this.pointInRect(c, r) ||\n      // discriminate last cases\n      (() => {\n        const { x: w, y: h } = r.size;\n        const d = c.sub(r.topleft);\n\n        // project center on left side\n        const px = d.dot(new Vec2(w, 0));\n        if (px <= w && px >= 0) {\n          return true;\n        }\n\n        // project center on top size\n        const py = d.dot(new Vec2(0, h));\n        if (py <= h && py >= 0) {\n          return true;\n        }\n        return false;\n      })())\n  );\n}\n\n/**\n * resolve 2d rect vs rect collision\n * @param {Rect} reference rectangle\n * @param {Rect} ohter rectangle\n */\nexport function resolveCollision(r1, r2): CollisionSide {\n  if (!rectInRect(r1, r2)) {\n    return CollisionSide.NONE;\n  }\n\n  const vx = r1.center.x - r2.center.x;\n  const vy = r1.center.y - r2.center.y;\n  const ax = abs(vx);\n  const ay = abs(vy);\n  const ww2 = (r1.w + r2.w) / 2;\n  const hh2 = (r1.h + r2.h) / 2;\n\n  const ox = ww2 - ax;\n  const oy = hh2 - ay;\n  if (ox > 0 && oy > 0) {\n    if (ox >= oy) {\n      return vy > 0 ? CollisionSide.TOP : CollisionSide.BOTTOM;\n    } else {\n      return vx > 0 ? CollisionSide.LEFT : CollisionSide.RIGHT;\n    }\n  }\n\n  return CollisionSide.NONE;\n}\n","const { atan2, sqrt } = Math;\n\n/**\n * Vec2 - 2D vector class\n */\nexport class Vec2 {\n  x: number;\n  y: number;\n\n  /**\n   * create a Vector 2D Object\n   * @param {number} x\n   * @param {number} y\n   */\n  constructor(x = 0, y = 0) {\n    this.x = x;\n    this.y = y;\n  }\n\n  /**\n   * Return a fresh null vector\n   */\n  static null(): Vec2 {\n    return new Vec2(0, 0);\n  }\n\n  /**\n   * Construct a Vec2 with both components equal\n   * @param x {number} value of the components\n   */\n  static scal(x: number) {\n    return new Vec2(x, x);\n  }\n\n  /**\n   * Construct a Vec2 from an arbitrary object\n   */\n  static from_obj(obj: Record<string, unknown>): Vec2 {\n    const x: number = typeof obj[\"x\"] == \"number\" ? obj[\"x\"] : 0;\n    const y: number = typeof obj[\"y\"] == \"number\" ? obj[\"y\"] : 0;\n    return new Vec2(x, y);\n  }\n\n  /**\n   * Construct a Vec2 pointing toward x+\n   */\n  static xAxis(): Vec2 {\n    return new Vec2(1, 0);\n  }\n\n  /**\n   * Construct a Vec2 pointing toward y+\n   */\n  static yAxis(): Vec2 {\n    return new Vec2(0, 1);\n  }\n\n  /**\n   * Clone a Vec2\n   * @param {Vec2} v\n   * @returns a fresh Vec2\n   */\n  clone(): Vec2 {\n    return new Vec2(this.x, this.y);\n  }\n\n  /**\n   * Return a fresh vector with the same coordinates.\n   */\n  static copy({ x, y }): Vec2 {\n    return new Vec2(x, y);\n  }\n\n  /**\n   * Set the components of a vector in place\n   */\n  set(x: number | Vec2, y: number | null = null): Vec2 {\n    if (x instanceof Vec2) {\n      this.x = x.x;\n      this.y = x.y;\n    } else {\n      this.x = x != null && x != undefined ? x : this.x;\n      this.y = y != null && x != undefined ? y : this.y;\n    }\n    return this;\n  }\n\n  /**\n   * Return a new vector sum of this and another\n   * @param other {Vec2}\n   */\n  add({ x, y }) {\n    return new Vec2(this.x + x, this.y + y);\n  }\n\n  /**\n   * Return a new vector difference of this and another\n   * @param other {Vec2}\n   */\n  sub({ x, y }) {\n    return new Vec2(this.x - x, this.y - y);\n  }\n\n  /**\n   * Return a new vector product of this and another\n   * @param other {Vec2}\n   */\n  mul({ x, y }) {\n    return new Vec2(this.x * x, this.y * y);\n  }\n\n  /**\n   * Return a new vector quotient of this and another\n   * @param other {Vec2}\n   */\n  div({ x, y }) {\n    return new Vec2(this.x / x, this.y / y);\n  }\n\n  /**\n   * Return the angle in radians between two vectors\n   */\n  angle(other: Vec2) {\n    const det = this.det(other);\n    const dot = this.dot(other);\n    return atan2(det, dot);\n  }\n\n  /**\n   * Return the dot product of this and another vector\n   */\n  dot({ x, y }) {\n    return this.x * x + this.y * y;\n  }\n\n  /**\n   * Return the determinant of this and another vector\n   */\n  det({ x, y }) {\n    return this.x * y - this.y * x;\n  }\n\n  /**\n   * Return the length/norm/magnitude of this vector\n   */\n  length() {\n    return sqrt(this.x * this.x + this.y * this.y);\n  }\n\n  /**\n   * Return the squared length of this vector\n   */\n  length2() {\n    return this.x * this.x + this.y * this.y;\n  }\n\n  /**\n   * Compare to a vector\n   */\n  equals({ x, y }) {\n    return this.x == x && this.y == y;\n  }\n\n  /**\n   * Linear interpolation\n   */\n  lerp({ x, y }, alpha) {\n    return new Vec2(\n      this.x + (x - this.x) * alpha,\n      this.y + (y - this.y) * alpha\n    );\n  }\n\n  /**\n   * Return a new vector of length 1 and of same direction.\n   */\n  normalize() {\n    return this.div(Vec2.scal(this.length() || 1));\n  }\n\n  /**\n   * Return a new vector of length n and of same direction.\n   */\n  withNorm(n: number) {\n    return this.mul(Vec2.scal(n / (this.length() || 1)));\n  }\n\n  /**\n   * return the distance between this point and another\n   */\n  distance(other) {\n    return this.sub(other).length();\n  }\n\n  /**\n   * return the squared distance between this point and another\n   */\n  distance2(other) {\n    return this.sub(other).length2();\n  }\n}\n","export * from \"./camera\";\nexport * from \"./canvas\";\nexport * from \"./collision\";\nexport * from \"./dom\";\nexport * from \"./ecs\";\nexport * from \"./emitter\";\nexport * from \"./game\";\nexport * from \"./inputs\";\nexport * from \"./loader\";\nexport * from \"./rect\";\nexport * from \"./sound\";\nexport * from \"./sprite\";\nexport * from \"./stage\";\nexport * from \"./utils\";\nexport * from \"./vec2\";\nexport * from \"./store\";\n","import { Vec2 } from \"./vec2\";\nimport { Rect } from \"./rect\";\nimport { Canvas } from \"./canvas\";\n\nconst SNAP_DIST2 = 4;\n\n/**\n * Camera\n * Change the target property to move the camera around.\n * It needs to be set on every frame.\n */\nexport class Camera {\n  can: Canvas;\n  ctx: CanvasRenderingContext2D;\n  protected pos: Vec2;\n  target: Vec2;\n  readonly center: Vec2;\n\n  /**\n   * @param {CanvasRenderingContext2D} ctx - current canvas context\n   * @param {Vec2} target - initial point to look at\n   * @param {Vec2} offset - offset from screen center\n   */\n  constructor(can: Canvas, target: Vec2, offset?: Vec2) {\n    this.can = can;\n    this.ctx = can.ctx;\n    this.target = target;\n    offset = offset ?? Vec2.null();\n    this.center = can.size.mul(Vec2.scal(0.5)).sub(offset);\n    this.pos = this.center.sub(this.target);\n  }\n\n  /**\n   * Start rendering through this camera\n   */\n  attach() {\n    this.ctx.save();\n    this.ctx.translate(this.pos.x, this.pos.y);\n    return this;\n  }\n\n  /**\n   * Stop rendering through this camera\n   */\n  detach() {\n    this.ctx.restore();\n    return this;\n  }\n\n  /**\n   * update the camera\n   * @param {number} dt\n   */\n  update(_dt: number) {\n    this.pos.set(this.center.sub(this.target));\n    return this;\n  }\n\n  /**\n   * return the rectangle currently showed through the camera.\n   */\n  get rect(): Rect {\n    const r = Rect.null();\n    r.size = this.can.size;\n    r.topleft = this.pos.mul(Vec2.scal(-1));\n    return r;\n  }\n}\n\n/**\n * A camera that follows its target by moving at constant speed.\n */\nexport class SmoothCamera extends Camera {\n  speed: number;\n\n  /**\n   * @param {CanvasRenderingContext2D} ctx - current canvas context\n   * @param {Vec2} target - initial point to look at\n   * @param {number} speed speed at wich the camera moves (pixel per seconds)\n   * @param {Vec2?} offset - offset from screen center\n   */\n  constructor(can: Canvas, target: Vec2, speed: number, offset?: Vec2) {\n    super(can, target, offset);\n    this.speed = speed;\n  }\n\n  update(dt: number) {\n    const ptarget = this.center.sub(this.target);\n\n    const delta = ptarget.sub(this.pos);\n\n    const dr = this.speed * dt;\n    if (delta.length2() > dr * dr) {\n      this.pos.set(this.pos.add(delta.withNorm(dr)));\n    } else {\n      this.pos.set(ptarget);\n    }\n    return this;\n  }\n}\n","import { Vec2 } from \"./vec2\";\n\nexport class Rect {\n  x: number;\n  y: number;\n  w: number;\n  h: number;\n\n  /**\n   * @param {number} x left coordinate\n   * @param {number} y top coordinate\n   * @param {number} w width of the rectangle\n   * @param {number} h height of the rectangle\n   */\n  constructor(x: number, y: number, w: number, h: number) {\n    this.x = x;\n    this.y = y;\n    this.w = w;\n    this.h = h;\n  }\n\n  /**\n   * Return a fresh null rectangle (size = Vec2.null() and topright = Vec2.null())\n   */\n  static null(): Rect {\n    return new Rect(0, 0, 0, 0);\n  }\n\n  /**\n   * Return a fresh rectangle initialized from an arbitrary object.\n   */\n  static from_obj(obj: Record<string, unknown>): Rect {\n    const x: number = typeof obj[\"x\"] == \"number\" ? obj[\"x\"] : 0;\n    const y: number = typeof obj[\"y\"] == \"number\" ? obj[\"y\"] : 0;\n    const w: number = typeof obj[\"w\"] == \"number\" ? obj[\"w\"] : 0;\n    const h: number = typeof obj[\"h\"] == \"number\" ? obj[\"h\"] : 0;\n    return new Rect(x, y, w, h);\n  }\n\n  /**\n   * Top left corner coordinates\n   * Do not set the components directly, it would not update the rectangle.\n   */\n  get topleft(): Vec2 {\n    return new Vec2(this.x, this.y);\n  }\n\n  set topleft({ x, y }) {\n    this.x = x;\n    this.y = y;\n  }\n\n  /**\n   * Top right corner coordinates\n   * Do not set the components directly, it would not update the rectangle.\n   */\n  get topright(): Vec2 {\n    return new Vec2(this.x + this.w, this.y);\n  }\n\n  set topright({ x, y }) {\n    this.x = x - this.w;\n    this.y = y;\n  }\n\n  /**\n   * Bottom left corner coordinates\n   * Do not set the components directly, it would not update the rectangle.\n   */\n  get bottomleft(): Vec2 {\n    return new Vec2(this.x, this.y + this.h);\n  }\n\n  set bottomleft({ x, y }) {\n    this.x = x;\n    this.y = y - this.h;\n  }\n\n  /**\n   * Bottom right corner coordinates\n   * Do not set the components directly, it would not update the rectangle.\n   */\n  get bottomright(): Vec2 {\n    return new Vec2(this.x + this.h, this.y + this.h);\n  }\n\n  set bottomright({ x, y }) {\n    this.x = x - this.w;\n    this.y = y - this.h;\n  }\n\n  /**\n   * Center coordinates\n   * Do not set the components directly, it would not update the rectangle.\n   */\n  get center(): Vec2 {\n    return new Vec2(this.x + 0.5 * this.w, this.y + 0.5 * this.h);\n  }\n\n  set center({ x, y }) {\n    this.x = x - 0.5 * this.w;\n    this.y = y - 0.5 * this.h;\n  }\n\n  /**\n   * Left coordinate\n   */\n  get left(): number {\n    return this.x;\n  }\n\n  set left(x: number) {\n    this.x = x;\n  }\n\n  /**\n   * right coordinate\n   */\n  get right(): number {\n    return this.x + this.w;\n  }\n\n  set right(x: number) {\n    this.x = x - this.w;\n  }\n\n  /**\n   * Top coordinate\n   */\n  get top(): number {\n    return this.y;\n  }\n\n  set top(y: number) {\n    this.y = y;\n  }\n\n  /**\n   * Bottom coordinate\n   */\n  get bottom(): number {\n    return this.y + this.h;\n  }\n\n  set bottom(y: number) {\n    this.y = y - this.h;\n  }\n\n  /**\n   * Size as a vector.\n   * Setting this with shrink or grow the rectangle from top left corner.\n   * Do not set the components directly, it would not update the rectangle.\n   */\n  get size(): Vec2 {\n    return new Vec2(this.w, this.h);\n  }\n\n  set size({ x, y }) {\n    this.w = x;\n    this.h = y;\n  }\n}\n","import { qs } from \"./dom\";\nimport { Vec2 } from \"./vec2\";\nimport { Rect } from \"./rect\";\n\nconst DEFAULT_FONT = \"droid sans\";\nconst DEFAULT_SIZE = \"24px\";\n\n/**\n * Abstraction over the HTMLCanvasElement\n */\nexport class Canvas {\n  readonly canElement: HTMLCanvasElement;\n  readonly width: number;\n  readonly height: number;\n  private _ctx?: CanvasRenderingContext2D;\n\n  /**\n   * Initialize a new Canvas\n   * @param {number} width\n   * @param {number} height\n   * @param {string} background - background color\n   */\n  constructor(width = 400, height = 400, background = \"#FFFFFF\") {\n    this.canElement = document.createElement(\"canvas\"); // canvas\n\n    this.width = width;\n    this.height = height;\n    this.canElement.width = width; // set width\n\n    this.canElement.height = height; // set height\n\n    this._ctx = null;\n\n    if (background) this.canElement.style.background = background; // change background\n  }\n\n  /**\n   * A simple shortcut covering the most common case\n   */\n  static quickSetup(options: Record<string, unknown>) {\n    const w: number = typeof options[\"w\"] == \"number\" ? options[\"w\"] : 720;\n    const h: number = typeof options[\"h\"] == \"number\" ? options[\"h\"] : 480;\n    const bg: string =\n      typeof options[\"bg\"] == \"string\" ? options[\"bg\"] : \"#FFFFFF\";\n    const id = typeof options[\"id\"] == \"string\" ? options[\"id\"] : undefined;\n    const parent =\n      options[\"parent\"] instanceof Element ? options[\"parent\"] : qs(\"body\");\n\n    const can = new Canvas(w, h, bg);\n\n    if (options[\"smooth\"] !== undefined && options[\"smooth\"] !== null) {\n      can.smooth(options[\"smooth\"] as boolean);\n    }\n\n    can.attach(parent, id);\n\n    return can;\n  }\n\n  get ctx() {\n    if (!this._ctx) {\n      this._ctx = this.canElement.getContext(\"2d\");\n    }\n    return this._ctx;\n  }\n\n  get size(): Vec2 {\n    return new Vec2(this.canElement.width, this.canElement.height);\n  }\n\n  get rect(): Rect {\n    return new Rect(0, 0, this.canElement.width, this.canElement.height);\n  }\n\n  boundingRect(): Rect {\n    const { top, left, width, height } =\n      this.canElement.getBoundingClientRect();\n    return new Rect(top, left, width, height);\n  }\n\n  attach(parent?: Node, id?: string) {\n    if (id) {\n      const prev = qs(\"#\" + id);\n      if (prev) {\n        prev.remove();\n      }\n      this.canElement.id = id;\n    }\n\n    if (!parent) {\n      parent = qs(\"body\");\n    }\n\n    parent.appendChild(this.canElement);\n    return this;\n  }\n\n  clear() {\n    this.ctx.clearRect(0, 0, this.width, this.height);\n    return this;\n  }\n\n  drawText(text: string, pos: Vec2, options?: Record<string, unknown>) {\n    const font: string =\n      typeof options[\"font\"] == \"string\" ? options[\"font\"] : DEFAULT_FONT;\n    const align: string =\n      typeof options[\"align\"] == \"string\" ? options[\"align\"] : \"start\";\n    const size: string =\n      typeof options[\"size\"] == \"string\" ? options[\"size\"] : DEFAULT_SIZE;\n\n    this.ctx.font = `${size} ${font}`;\n    this.ctx.textAlign = align as CanvasTextAlign;\n    this.ctx.fillText(text, pos.x, pos.y);\n  }\n\n  smooth(enabled: boolean) {\n    this.ctx.imageSmoothingEnabled = enabled;\n    return this;\n  }\n}\n","const doc = document;\nconst selectorRegex = /([.#])/;\nconst ns = \"http://www.w3.org/2000/svg\";\n\nconst parseSelector = (selector) => {\n  const tokens = selector.split(selectorRegex);\n  let id = \"\",\n    className = \"\";\n\n  for (let i = 1; i < tokens.length; i += 2) {\n    switch (tokens[i]) {\n      case \".\":\n        className += ` ${tokens[i + 1]}`;\n        break;\n      case \"#\":\n        id = tokens[i + 1];\n    }\n  }\n\n  return {\n    tag: tokens[0] || \"div\",\n    className: className.trim(),\n    id,\n  };\n};\n\n/**\n * Create a new DOM element\n * @param {string} selector - CSS style selector\n * @param {boolean} isSvg - if true, create a SVG element\n */\nexport function el(selector: string, isSvg = false) {\n  const { tag, id, className } = parseSelector(selector);\n  const element = isSvg ? doc.createElementNS(ns, tag) : doc.createElement(tag);\n\n  if (id) element.id = id;\n\n  if (className) {\n    if (isSvg) {\n      attr(element, \"class\", className);\n    } else {\n      element.className = className;\n    }\n  }\n\n  return element;\n}\n\n/**\n * Create a new document fragment.\n */\nexport function frag() {\n  return doc.createDocumentFragment();\n}\n\n/**\n * Wrapper to querySelector.\n * @param {string} selector - parameter to ctx.querySelector\n * @param {} ctx - default to document\n */\nexport function qs(selectors: string, ctx = doc) {\n  return ctx.querySelector(selectors);\n}\n\n/**\n * Wrapper to querySelectorAll.\n * @param {string} selector - parameter to ctx.querySelector\n * @param {} ctx - default to document\n */\nexport function qsa(selectors: string, ctx = doc) {\n  return ctx.querySelectorAll(selectors);\n}\n\n/**\n * Set style of an element.\n * @param {HTMLElement} element - element whose style should be set\n * @param {CSSStyleDeclaration} styleObj\n */\nexport function style(element: HTMLElement, styleObj: CSSStyleDeclaration) {\n  return Object.assign(element.style, styleObj);\n}\n\nexport function attr(element: HTMLElement, attributeName: string, value?) {\n  if (value === undefined) return element.getAttribute(attributeName);\n\n  if (value === false) {\n    element.removeAttribute(attributeName);\n  } else {\n    element.setAttribute(attributeName, value);\n  }\n}\n\n/**\n * Setup an event listener.\n * @param {EventTarget} element\n * @param {string} type - event type\n * @param {function} handler - event handler\n */\nexport function on(\n  element: EventTarget,\n  type: string,\n  handler: EventListenerOrEventListenerObject\n) {\n  element.addEventListener(type, handler, false);\n  return function () {\n    element.removeEventListener(type, handler, false);\n  };\n}\n\n/**\n * Check if the context is ready and call app.\n * @param {function} app - called when context is ready.\n */\nexport function ready(app) {\n  if (/complete|loaded|interactive/.test(doc.readyState) && doc.body) {\n    app();\n  } else {\n    on(doc, \"DOMContentLoaded\", app);\n  }\n}\n\nexport function emit(\n  element: EventTarget,\n  event: string | Event,\n  details: object\n): Event {\n  if (typeof event === \"string\") {\n    const e = new CustomEvent(event, { detail: details });\n    element.dispatchEvent(e);\n    return e;\n  } else {\n    element.dispatchEvent(event);\n    return event;\n  }\n}\n","type Component = symbol;\ntype Entity = symbol;\n\n/**\n * The central object of the ECS system.\n */\nexport class Registry {\n  entities: Map<Entity, { compList: Component[] }>;\n  components: Map<\n    Component,\n    { name: string; map: Map<Entity, object>; defVal: object }\n  >;\n  private selectedEntity: Entity;\n  private eCounter: number;\n  private cCounter: number;\n\n  constructor() {\n    this.selectedEntity = Symbol();\n    this.entities = new Map();\n    this.components = new Map();\n  }\n\n  /**\n   * Create and select an entity.\n   */\n  entity(): Registry;\n  entity(name): Registry;\n  entity(name?: string | symbol): Registry {\n    let ent;\n\n    if (name) {\n      if (typeof name == \"string\") {\n        ent = Symbol.for(name);\n      } else {\n        ent = name;\n      }\n    } else {\n      ent = Symbol();\n    }\n\n    this.selectedEntity = ent;\n    if (!this.entities.has(ent)) {\n      this.entities.set(ent, { compList: [] });\n      this.selectedEntity = ent;\n    }\n    return this;\n  }\n\n  /**\n   * Return an entity from its name.\n   */\n  entityByName(ent: string): Entity {\n    return Symbol.for(ent);\n  }\n\n  /**\n   * Add a component to the selected entity.\n   */\n  addComponent(comp: Component | string): Registry;\n  addComponent(comp: Component | string, values): Registry;\n  addComponent(comp: Component | string, values?): Registry {\n    if (!values) values = {};\n    if (typeof comp == \"string\") {\n      comp = this.componentByName(comp);\n    }\n    const { map, defVal } = this.components.get(comp);\n    const val = {};\n    for (const key in defVal) {\n      if (key in values) {\n        val[key] = values[key];\n      } else {\n        val[key] = defVal[key];\n      }\n    }\n    map.set(this.selectedEntity, val);\n\n    this.entities.get(this.selectedEntity).compList.push(comp);\n    return this;\n  }\n\n  /**\n   * Map callback to all entities that have every components in comps.\n   * When callback is called, the corresponding entity is selected.\n   */\n  queryAll(callback: (...compVals) => void, ...comps: Component[]): Registry {\n    const maps: Map<Entity, object>[] = comps.map(\n      (c) => this.components.get(c).map\n    );\n    const smaller = maps.reduce((a, b) => (a.size < b.size ? a : b));\n    for (const ent of smaller.keys()) {\n      const values = [];\n      let valid = true;\n      for (const map of maps) {\n        const val = map.get(ent);\n        if (!val) {\n          valid = false;\n          break;\n        } else {\n          values.push(val);\n        }\n      }\n\n      if (valid) {\n        this.selectedEntity = ent;\n        callback(...values);\n      }\n    }\n    return this;\n  }\n\n  /**\n   * Return all data of a given entity\n   */\n  entityData();\n  entityData(ent: Entity);\n  entityData(ent?: Entity) {\n    if (ent) {\n      this.selectedEntity = ent;\n    }\n\n    const { compList } = this.entities.get(this.selectedEntity);\n\n    const res = {};\n\n    for (const comp of compList) {\n      const { name, map } = this.components.get(comp);\n      const val = map.get(this.selectedEntity);\n      res[name] = val;\n    }\n\n    return res;\n  }\n\n  /**\n   * Create a new component.\n   */\n  makeComponent(name: string): Component;\n  makeComponent(name: string, defVal: object): Component;\n  makeComponent(name: string, defVal?: object): Component {\n    const comp = Symbol.for(\"%%comp%%\" + name);\n    this.components.set(comp, { name, map: new Map(), defVal: defVal });\n    return comp;\n  }\n\n  /**\n   * Return a component from its name.\n   */\n  componentByName(name: string): Component {\n    return Symbol.for(\"%%comp%%\" + name);\n  }\n}\n","/**\n * A general function type for handling custom events\n */\nexport type ToupieEventHandler = (...args) => undefined;\n\n/**\n * A complementary event system.\n */\nexport class EventEmitter {\n  events: Map<string, Set<ToupieEventHandler>>;\n\n  constructor() {\n    this.events = new Map();\n  }\n\n  /**\n   * Bind a new event listener\n   * @param {string} type - event type\n   * @param {function} listener - event handler\n   */\n  on(type: string, listener: ToupieEventHandler) {\n    if (!this.events.has(type)) {\n      this.events.set(type, new Set());\n    }\n\n    const listeners = this.events.get(type);\n\n    listeners.add(listener);\n    return () => {\n      listeners.delete(listener);\n      if (!listeners.size) this.events.delete(type);\n    };\n  }\n\n  /**\n   * Disable an event listener\n   * @param {string} type - event type\n   * @param {function} listener - event handler to disable\n   */\n  off(type: string, listener: ToupieEventHandler) {\n    const listeners = this.events.get(type);\n\n    if (!listeners) return;\n\n    listeners.delete(listener);\n\n    if (!listeners.size) this.events.delete(type);\n  }\n\n  /**\n   * Emit an event and handle it.\n   * @param {string} - event type\n   * @params {} args - event handlers parameters\n   */\n  emit(type: string, ...args) {\n    const listeners = this.events.get(type);\n\n    if (!listeners) return;\n\n    listeners.forEach((listener) => listener(...args));\n  }\n}\n","/**\n * Run the main loop.\n */\n\nexport type Game = {\n  update: (number) => void;\n  render?: () => void;\n  stop?: () => void;\n};\n\n/**\n * Handle looping a game.\n */\nexport class Looper {\n  protected lastStep: number;\n  protected frameRequest: number;\n  protected game: Game;\n  protected running: boolean;\n\n  constructor() {\n    this.lastStep = 0;\n    this.frameRequest = 0;\n  }\n\n  /**\n   * Start looping.\n   */\n  run(game: Game): () => void {\n    if (!this.running) {\n      this.running = true;\n      this.game = game;\n      if (!this.game.render)\n        this.game.render = () => {\n          return;\n        };\n      this.loop();\n    }\n    return () => this.stop();\n  }\n\n  protected loop(): void {\n    const now = performance.now();\n    const dt = (now - this.lastStep) / 1000;\n    this.game.update(dt);\n    this.game.render();\n    this.lastStep = now;\n    this.frameRequest = requestAnimationFrame(() => this.loop());\n  }\n\n  /**\n   * Stop the loop.\n   */\n  stop(): void {\n    if (this.game.stop) this.game.stop();\n    if (this.frameRequest) cancelAnimationFrame(this.frameRequest);\n    this.frameRequest = undefined;\n    this.running = false;\n  }\n}\n\nconst defaultLooper = new Looper();\n\n/**\n * Setup a game and run its main loop.\n */\nexport function run(game: Game): () => void {\n  return defaultLooper.run(game);\n}\n","import { on, emit } from \"./dom\";\nimport { Vec2 } from \"./vec2\";\nimport { Canvas } from \"./canvas\";\nimport gpMappings from \"./mappings\";\n\n/**\n * Key that can be tested for press.\n */\nexport enum KeyType {\n  LEFT = \"ArrowLeft\",\n  RIGHT = \"ArrowRight\",\n  UP = \"ArrowUp\",\n  DOWN = \"ArrowDown\",\n  SPACEBAR = \" \",\n  ESCAPE = \"Escape\",\n  ENTER = \"Enter\",\n  CTRL = \"Control\",\n  TAB = \"Tab\",\n  ALT = \"Alt\",\n  A = \"a\",\n  B = \"b\",\n  C = \"c\",\n  D = \"d\",\n  E = \"e\",\n  F = \"f\",\n  G = \"g\",\n  H = \"h\",\n  I = \"i\",\n  J = \"j\",\n  K = \"k\",\n  L = \"l\",\n  M = \"m\",\n  N = \"n\",\n  O = \"o\",\n  P = \"p\",\n  Q = \"q\",\n  R = \"r\",\n  S = \"s\",\n  T = \"t\",\n  U = \"u\",\n  V = \"v\",\n  W = \"w\",\n  X = \"x\",\n  Y = \"y\",\n  Z = \"z\",\n}\n\n/**\n * Mouse button that can be tested for press.\n */\nexport enum MouseButton {\n  LEFT = 0,\n  MIDDLE = 1,\n  RIGHT = 2,\n  BACK = 3,\n  FORWARD = 4,\n}\n\nconst defaultMapping = [\n  [KeyType.LEFT],\n  [KeyType.RIGHT],\n  [KeyType.UP],\n  [KeyType.DOWN],\n];\n\nexport const arrowMappings = {\n  wasd: [\n    [KeyType.LEFT, KeyType.A],\n    [KeyType.RIGHT, KeyType.D],\n    [KeyType.UP, KeyType.W],\n    [KeyType.DOWN, KeyType.S],\n  ],\n  zqsd: [\n    [KeyType.LEFT, KeyType.Q],\n    [KeyType.RIGHT, KeyType.D],\n    [KeyType.UP, KeyType.Z],\n    [KeyType.DOWN, KeyType.S],\n  ],\n  ijkl: [\n    [KeyType.LEFT, KeyType.J],\n    [KeyType.RIGHT, KeyType.L],\n    [KeyType.UP, KeyType.I],\n    [KeyType.DOWN, KeyType.K],\n  ],\n  hjkl: [\n    [KeyType.LEFT, KeyType.H],\n    [KeyType.RIGHT, KeyType.L],\n    [KeyType.UP, KeyType.K],\n    [KeyType.DOWN, KeyType.J],\n  ],\n  \"\": defaultMapping,\n};\n\nexport const dirIndex = {\n  LEFT: 0,\n  RIGHT: 1,\n  UP: 2,\n  DOWN: 3,\n};\n\n/**\n * Gamepad mapping\n */\nexport type GamepadMapping = {\n  buttons: Map<string, GamepadButtonMapping>;\n  axes: Map<string, GamepadAxisMapping>;\n  supported: Array<{ browser: string; id: string; os: string }>;\n};\n\nexport type GamepadAxisMapping =\n  | { type: \"axis\"; index: number; inverse: boolean }\n  | { type: \"button\"; index: number; indexNegative?: number };\n\nexport type GamepadButtonMapping =\n  | { type: \"button\"; index: number }\n  | { type: \"axis\"; index: number; direction: -1 | 1 };\n\n/**\n * @return {boolean} true if the device have touch screen capabilities\n */\nexport function isTouchscreen(): boolean {\n  return !!(\"ontouchstart\" in document.documentElement);\n}\n\n/**\n * @return {boolean} true if the browser supports gamepads\n */\nexport function gamepadAvailable(): boolean {\n  return !!(navigator && navigator.getGamepads);\n}\n\n/**\n * State for input handling.\n */\nexport class InputState {\n  private dir = new Vec2(0, 0);\n  private keyState: Map<string, { justChecked: boolean; down: boolean }> =\n    new Map();\n  private mouseButtonState: Map<\n    MouseButton,\n    { justChecked: boolean; down: boolean }\n  > = new Map();\n  private gamepadStates: Array<\n    Map<string, { justChecked: boolean; down: boolean }>\n  >;\n  private gamepads: Array<Gamepad>;\n  private gamepadMappings: Array<GamepadMapping>;\n  private dirKeys: Array<Array<KeyType>>;\n  private mouse: Vec2;\n  private stoppers: (() => void)[];\n  private frameRequest: number;\n\n  /**\n   * @param mapping {string} mapping name, can be \"wasd\", \"zqsd\", \"ijkl\", \"hjkl\" or \"\"\n   */\n  constructor(mapping = \"\") {\n    this.dirKeys = arrowMappings[mapping] ?? defaultMapping;\n    this.gamepads = [];\n    this.gamepadMappings = [];\n    this.mouse = Vec2.null();\n    this.stoppers = [];\n    this.frameRequest = undefined;\n  }\n\n  /**\n   * Change the mapping mode, can be \"wasd\", \"zqsd\", \"ijkl\", \"hjkl\" or \"\"\n   */\n  setKBMapping(mapping: string): InputState {\n    this.dirKeys = arrowMappings[mapping] ?? defaultMapping;\n    return this;\n  }\n\n  /**\n   * Start the monitoring of input events.\n   */\n  start(): InputState {\n    this.stoppers = [\n      on(window, \"keyup\", (e: KeyboardEvent) => this.handleKeyUp(e)),\n      on(window, \"keydown\", (e: KeyboardEvent) => this.handleKeyDown(e)),\n      on(window, \"mousemove\", (e: MouseEvent) => this.handleMouseMov(e)),\n      on(window, \"mousedown\", (e: MouseEvent) => this.handleMouseDown(e)),\n      on(window, \"mouseup\", (e: MouseEvent) => this.handleMouseUp(e)),\n      on(window, \"gamepadconnected\", () => this.handleGamepadConnect()),\n      on(window, \"gamepaddisconnected\", () => this.handleGamepadConnect()),\n      ...this.stoppers,\n    ];\n    this.refreshGamepads();\n    return this;\n  }\n\n  /**\n   * Stop the listeners for events.\n   */\n  stop(): void {\n    if (this.frameRequest) cancelAnimationFrame(this.frameRequest);\n    this.frameRequest = undefined;\n\n    this.stoppers.forEach((stop) => stop());\n    this.stoppers = [];\n  }\n\n  /**\n   * Update hidden states.\n   */\n  protected loop(): void {\n    this.updateGamepad();\n    this.frameRequest = requestAnimationFrame(() => this.loop());\n  }\n\n  /**\n   * Return the position of the mouse in pixels in the canvas.\n   */\n  mousePos(canvas: Canvas): Vec2 {\n    const r = canvas.boundingRect();\n    const scale = canvas.size.div(r.size);\n\n    return this.mouse.sub(r.topleft).mul(scale);\n  }\n\n  /**\n   * Return a vector in the direction of the movement according to the keyboard.\n   */\n  direction(): Vec2 {\n    const x = this.anyKeyDown(this.dirKeys[dirIndex.RIGHT])\n      ? 1\n      : this.anyKeyDown(this.dirKeys[dirIndex.LEFT])\n      ? -1\n      : 0;\n\n    const y = this.anyKeyDown(this.dirKeys[dirIndex.DOWN])\n      ? 1\n      : this.anyKeyDown(this.dirKeys[dirIndex.UP])\n      ? -1\n      : 0;\n\n    this.dir.set(x, y);\n    return this.dir;\n  }\n\n  /**\n   * Return true if the button is held down.\n   */\n  buttonDown(but: MouseButton): boolean {\n    if (!this.mouseButtonState.has(but)) return false;\n    const { down } = this.mouseButtonState.get(but);\n    return down;\n  }\n\n  /**\n   * check if a key has been pressed. Return true only once per press.\n   */\n  buttonPressed(but: MouseButton): boolean {\n    if (!this.mouseButtonState.has(but)) return false;\n    const { justChecked, down } = this.mouseButtonState.get(but);\n    this.mouseButtonState.set(but, { justChecked: down, down });\n    return down;\n  }\n\n  /**\n   * return true as long as a key is held down\n   * @param {KeyType} key\n   */\n  keyDown(key: KeyType): boolean {\n    if (!this.keyState.has(key)) return false;\n    const { down } = this.keyState.get(key);\n    return down;\n  }\n\n  /**\n   * check if a key has been pressed. Return true only once per press.\n   */\n  keyPressed(key: KeyType): boolean {\n    if (!this.keyState.has(key)) return false;\n    const { justChecked, down } = this.keyState.get(key);\n    this.keyState.set(key, { justChecked: down, down });\n    return down;\n  }\n\n  /**\n   * Return true if any of the keys passed in the array parameter is down.\n   */\n  anyKeyDown(keys: KeyType[]): boolean {\n    for (const k of keys) {\n      if (this.keyDown(k)) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * Setup an event handler for all\n   */\n  onKeyPress(callback) {\n    const checked = new Map();\n    const ru = on(window, \"keydown\", (e: KeyboardEvent) => {\n      if (!checked.get(e.key)) {\n        callback(e.key);\n        checked.set(e.key, true);\n      }\n    });\n\n    const rd = on(window, \"keyup\", (e: KeyboardEvent) => {\n      checked.set(e.key, false);\n    });\n    this.stoppers.push(rd);\n    this.stoppers.push(ru);\n  }\n\n  /**\n   * Refresh the gamepad list\n   */\n  refreshGamepads() {\n    if (gamepadAvailable()) {\n      this.gamepads = navigator.getGamepads();\n      this.gamepadMappings = this.gamepads.map(findMapping);\n      this.gamepadStates = this.gamepads.map((_, i) => {\n        if (this.gamepadStates[i]) {\n          return this.gamepadStates[i];\n        } else {\n          return new Map();\n        }\n      });\n    } else {\n      this.gamepads = [];\n      this.gamepadMappings = [];\n    }\n    return this;\n  }\n\n  /**\n   * Return the number of connected gamepads\n   */\n  gamepadNumber(): number {\n    return this.gamepads.length;\n  }\n\n  /**\n   * Check if a button have just been pressed.\n   */\n  gamepadButtonPressed(gp: number, button: string): boolean {\n    const { justChecked, down } = this.gamepadStates[gp].get(button);\n    this.gamepadStates[gp].set(button, { justChecked: down, down });\n    return !justChecked && down;\n  }\n\n  /**\n   * Check if a button is currently being held down.\n   */\n  gamepadButtonDown(gp: number, button: string): boolean {\n    const { down } = this.gamepadStates[gp].get(button);\n    return down;\n  }\n\n  /**\n   * Return the value of the axis between -1 and 1.\n   */\n  gamepadGetAxis(gp: number, axis: string): number {\n    const mp = this.gamepadMappings[gp].axes.get(axis);\n\n    if (!mp) {\n      return 0;\n    }\n\n    return getGPAxis(this.gamepads[gp], mp);\n  }\n\n  /**\n   * Return true if the gamepad is useable.\n   */\n  gamepadIsMapped(gp: number): boolean {\n    if (gp >= this.gamepads.length) return false;\n    if (gp < 0) return false;\n    return !!this.gamepadMappings[gp];\n  }\n\n  protected updateGamepad(): void {\n    this.gamepads.forEach((gp: Gamepad, i) => {\n      if (!gp) return;\n\n      const mp = this.gamepadMappings[i];\n\n      if (!mp) return;\n\n      for (const [name, bt] of mp.buttons) {\n        if (getGPButton(gp, bt)) {\n          if (!this.gamepadStates[i].get(name)) {\n            emit(window, \"gpdown\", { gp: i, button: name });\n            this.gamepadStates[i].set(name, {\n              justChecked: false,\n              down: true,\n            });\n          }\n        } else {\n          if (this.gamepadStates[i].get(name)) {\n            emit(window, \"gpup\", { gp: i, button: name });\n            this.gamepadStates[i].set(name, {\n              justChecked: false,\n              down: false,\n            });\n          }\n        }\n      }\n    });\n  }\n\n  private handleKeyDown(e: KeyboardEvent) {\n    if (e.defaultPrevented) return;\n\n    this.keyState.set(e.key, { justChecked: false, down: true });\n\n    e.preventDefault();\n  }\n\n  private handleKeyUp(e: KeyboardEvent) {\n    this.keyState.set(e.key, { justChecked: false, down: false });\n  }\n\n  private handleMouseMov(e: MouseEvent) {\n    this.mouse.set(e.clientX, e.clientY);\n  }\n\n  private handleMouseDown(e: MouseEvent) {\n    if (e.defaultPrevented) return;\n\n    this.mouse.set(e.clientX, e.clientY);\n\n    this.mouseButtonState.set(e.button as MouseButton, {\n      justChecked: false,\n      down: true,\n    });\n\n    e.preventDefault();\n  }\n\n  private handleMouseUp(e: MouseEvent) {\n    this.mouse.set(e.clientX, e.clientY);\n\n    this.mouseButtonState.set(e.button as MouseButton, {\n      justChecked: false,\n      down: false,\n    });\n  }\n\n  private handleGamepadConnect() {\n    this.refreshGamepads();\n  }\n}\n\nfunction getGPButton(gp: Gamepad, mp: GamepadButtonMapping): boolean {\n  if (mp.type == \"button\") {\n    return gp.buttons[mp.index].pressed;\n  } else {\n    if (mp.direction < 0) {\n      return gp.axes[mp.index] < -0.75;\n    } else {\n      return gp.axes[mp.index] > 0.75;\n    }\n  }\n}\n\nfunction getGPAxis(gp: Gamepad, mp: GamepadAxisMapping): number {\n  if (mp.type == \"axis\") {\n    if (mp.inverse) {\n      return -gp.axes[mp.index];\n    } else {\n      return gp.axes[mp.index];\n    }\n  } else {\n    let p = 0;\n    let n = 0;\n    if (gp.buttons[mp.index]) {\n      p = 1;\n    }\n    if (mp.indexNegative !== undefined && gp.buttons[mp.indexNegative]) {\n      n = 1;\n    }\n    return p - n;\n  }\n}\n\nfunction findMapping(gp: Gamepad | null): GamepadMapping | null {\n  if (gp === null) {\n    return null;\n  }\n\n  for (const mapping of gpMappings) {\n    for (const { id, os, browser } of mapping.supported) {\n      if (\n        gp.id.indexOf(id) !== -1 &&\n        browser.indexOf(os) !== -1 &&\n        browser.indexOf(browser) !== -1\n      ) {\n        return mapping;\n      }\n    }\n  }\n  return null;\n}\n","const mappings = [];\nexport default mappings;\nconst m0 = {\n  name: \"Logitech F310 (XInput) Firefox Linux\",\n  buttons: new Map(),\n  axes: new Map(),\n  supported: [\n    { browser: \"Firefox\", id: \"046d-c21d-Logitech Gamepad F310\", os: \"Linux\" },\n  ],\n};\nmappings.push(m0);\nm0.buttons.set(\"a\", { type: \"button\", index: 0 });\nm0.buttons.set(\"b\", { type: \"button\", index: 1 });\nm0.buttons.set(\"back\", { type: \"button\", index: 6 });\nm0.buttons.set(\"dpad down\", { type: \"axis\", index: 7, direction: 1 });\nm0.buttons.set(\"dpad left\", { type: \"axis\", index: 6, direction: -1 });\nm0.buttons.set(\"dpad right\", { type: \"axis\", index: 6, direction: 1 });\nm0.buttons.set(\"dpad up\", { type: \"axis\", index: 7, direction: -1 });\nm0.buttons.set(\"home\", { type: \"button\", index: 8 });\nm0.buttons.set(\"left shoulder\", { type: \"button\", index: 4 });\nm0.buttons.set(\"left stick\", { type: \"button\", index: 9 });\nm0.buttons.set(\"left stick down\", { type: \"axis\", index: 1, direction: 1 });\nm0.buttons.set(\"left stick left\", { type: \"axis\", index: 0, direction: -1 });\nm0.buttons.set(\"left stick right\", { type: \"axis\", index: 0, direction: 1 });\nm0.buttons.set(\"left stick up\", { type: \"axis\", index: 1, direction: -1 });\nm0.buttons.set(\"left trigger\", { type: \"axis\", index: 2, direction: 1 });\nm0.buttons.set(\"right shoulder\", { type: \"button\", index: 5 });\nm0.buttons.set(\"right stick\", { type: \"button\", index: 10 });\nm0.buttons.set(\"right stick down\", { type: \"axis\", index: 4, direction: 1 });\nm0.buttons.set(\"right stick left\", { type: \"axis\", index: 3, direction: -1 });\nm0.buttons.set(\"right stick right\", { type: \"axis\", index: 3, direction: 1 });\nm0.buttons.set(\"right stick up\", { type: \"axis\", index: 4, direction: -1 });\nm0.buttons.set(\"right trigger\", { type: \"axis\", index: 5, direction: 1 });\nm0.buttons.set(\"start\", { type: \"button\", index: 7 });\nm0.buttons.set(\"x\", { type: \"button\", index: 2 });\nm0.buttons.set(\"y\", { type: \"button\", index: 3 });\nm0.buttons.set(\"dpad x\", { type: \"axis\", index: 6, inverse: false });\nm0.buttons.set(\"dpad y\", { type: \"axis\", index: 7, inverse: false });\nm0.buttons.set(\"left stick x\", { type: \"axis\", index: 0, inverse: false });\nm0.buttons.set(\"left stick y\", { type: \"axis\", index: 1, inverse: false });\nm0.buttons.set(\"left trigger\", { type: \"axis\", index: 2, inverse: false });\nm0.buttons.set(\"right stick x\", { type: \"axis\", index: 3, inverse: false });\nm0.buttons.set(\"right stick y\", { type: \"axis\", index: 4, inverse: false });\nm0.buttons.set(\"right trigger\", { type: \"axis\", index: 5, inverse: false });\nconst m1 = {\n  name: \"PS4 Firefox Linux\",\n  buttons: new Map(),\n  axes: new Map(),\n  supported: [\n    {\n      browser: \"Firefox\",\n      id: \"054c-05c4-Sony Computer Entertainment Wireless Controller\",\n      os: \"Linux\",\n    },\n  ],\n};\nmappings.push(m1);\nm1.buttons.set(\"a\", { type: \"button\", index: 1 });\nm1.buttons.set(\"b\", { type: \"button\", index: 2 });\nm1.buttons.set(\"back\", { type: \"button\", index: 8 });\nm1.buttons.set(\"dpad down\", { type: \"axis\", index: 7, direction: 1 });\nm1.buttons.set(\"dpad left\", { type: \"axis\", index: 6, direction: -1 });\nm1.buttons.set(\"dpad right\", { type: \"axis\", index: 6, direction: 1 });\nm1.buttons.set(\"dpad up\", { type: \"axis\", index: 7, direction: -1 });\nm1.buttons.set(\"home\", { type: \"button\", index: 12 });\nm1.buttons.set(\"left shoulder\", { type: \"button\", index: 4 });\nm1.buttons.set(\"left stick\", { type: \"button\", index: 10 });\nm1.buttons.set(\"left stick down\", { type: \"axis\", index: 1, direction: 1 });\nm1.buttons.set(\"left stick left\", { type: \"axis\", index: 0, direction: -1 });\nm1.buttons.set(\"left stick right\", { type: \"axis\", index: 0, direction: 1 });\nm1.buttons.set(\"left stick up\", { type: \"axis\", index: 1, direction: -1 });\nm1.buttons.set(\"left trigger\", { type: \"button\", index: 6 });\nm1.buttons.set(\"right shoulder\", { type: \"button\", index: 5 });\nm1.buttons.set(\"right stick\", { type: \"button\", index: 11 });\nm1.buttons.set(\"right stick down\", { type: \"axis\", index: 5, direction: 1 });\nm1.buttons.set(\"right stick left\", { type: \"axis\", index: 2, direction: -1 });\nm1.buttons.set(\"right stick right\", { type: \"axis\", index: 2, direction: 1 });\nm1.buttons.set(\"right stick up\", { type: \"axis\", index: 5, direction: -1 });\nm1.buttons.set(\"right trigger\", { type: \"button\", index: 7 });\nm1.buttons.set(\"start\", { type: \"button\", index: 9 });\nm1.buttons.set(\"x\", { type: \"button\", index: 0 });\nm1.buttons.set(\"y\", { type: \"button\", index: 3 });\nm1.buttons.set(\"dpad x\", { type: \"axis\", index: 6, inverse: false });\nm1.buttons.set(\"dpad y\", { type: \"axis\", index: 7, inverse: false });\nm1.buttons.set(\"left stick x\", { type: \"axis\", index: 0, inverse: false });\nm1.buttons.set(\"left stick y\", { type: \"axis\", index: 1, inverse: false });\nm1.buttons.set(\"left trigger\", { type: \"axis\", index: 3, inverse: false });\nm1.buttons.set(\"right stick x\", { type: \"axis\", index: 2, inverse: false });\nm1.buttons.set(\"right stick y\", { type: \"axis\", index: 5, inverse: false });\nm1.buttons.set(\"right trigger\", { type: \"axis\", index: 4, inverse: false });\nconst m2 = {\n  name: \"Logitech F310 (DirectInput) Chrome/Firefox Linux\",\n  buttons: new Map(),\n  axes: new Map(),\n  supported: [\n    {\n      browser: \"Chrome\",\n      id: \"Logitech Logitech Dual Action (Vendor: 046d Product: c216)\",\n      os: \"Linux\",\n    },\n    {\n      browser: \"Firefox\",\n      id: \"046d-c216-Logitech Logitech Dual Action\",\n      os: \"Linux\",\n    },\n  ],\n};\nmappings.push(m2);\nm2.buttons.set(\"a\", { type: \"button\", index: 1 });\nm2.buttons.set(\"b\", { type: \"button\", index: 2 });\nm2.buttons.set(\"back\", { type: \"button\", index: 8 });\nm2.buttons.set(\"dpad down\", { type: \"axis\", index: 5, direction: 1 });\nm2.buttons.set(\"dpad left\", { type: \"axis\", index: 4, direction: -1 });\nm2.buttons.set(\"dpad right\", { type: \"axis\", index: 4, direction: 1 });\nm2.buttons.set(\"dpad up\", { type: \"axis\", index: 5, direction: -1 });\nm2.buttons.set(\"left shoulder\", { type: \"button\", index: 4 });\nm2.buttons.set(\"left stick\", { type: \"button\", index: 10 });\nm2.buttons.set(\"left stick down\", { type: \"axis\", index: 1, direction: 1 });\nm2.buttons.set(\"left stick left\", { type: \"axis\", index: 0, direction: -1 });\nm2.buttons.set(\"left stick right\", { type: \"axis\", index: 0, direction: 1 });\nm2.buttons.set(\"left stick up\", { type: \"axis\", index: 1, direction: -1 });\nm2.buttons.set(\"left trigger\", { type: \"button\", index: 6 });\nm2.buttons.set(\"right shoulder\", { type: \"button\", index: 5 });\nm2.buttons.set(\"right stick\", { type: \"button\", index: 11 });\nm2.buttons.set(\"right stick down\", { type: \"axis\", index: 3, direction: 1 });\nm2.buttons.set(\"right stick left\", { type: \"axis\", index: 2, direction: -1 });\nm2.buttons.set(\"right stick right\", { type: \"axis\", index: 2, direction: 1 });\nm2.buttons.set(\"right stick up\", { type: \"axis\", index: 3, direction: -1 });\nm2.buttons.set(\"right trigger\", { type: \"button\", index: 7 });\nm2.buttons.set(\"start\", { type: \"button\", index: 9 });\nm2.buttons.set(\"x\", { type: \"button\", index: 0 });\nm2.buttons.set(\"y\", { type: \"button\", index: 3 });\nm2.buttons.set(\"dpad x\", { type: \"axis\", index: 4, inverse: false });\nm2.buttons.set(\"dpad y\", { type: \"axis\", index: 5, inverse: false });\nm2.buttons.set(\"left stick x\", { type: \"axis\", index: 0, inverse: false });\nm2.buttons.set(\"left stick y\", { type: \"axis\", index: 1, inverse: false });\nm2.buttons.set(\"right stick x\", { type: \"axis\", index: 2, inverse: false });\nm2.buttons.set(\"right stick y\", { type: \"axis\", index: 3, inverse: false });\nconst m3 = {\n  name: \"Xbox One Chrome OSX Linux\",\n  buttons: new Map(),\n  axes: new Map(),\n  supported: [\n    {\n      browser: \"Chrome\",\n      id: \"\\u00a9Microsoft Corporation Controller (STANDARD GAMEPAD Vendor: 045e Product: 028e)\",\n      os: \"Linux\",\n    },\n    {\n      browser: \"Chrome\",\n      id: \"Xbox One Controller (STANDARD GAMEPAD Vendor: 02d1 Product: 045e)\",\n      os: \"Mac OS X\",\n    },\n  ],\n};\nmappings.push(m3);\nm3.buttons.set(\"a\", { type: \"button\", index: 0 });\nm3.buttons.set(\"b\", { type: \"button\", index: 1 });\nm3.buttons.set(\"back\", { type: \"button\", index: 8 });\nm3.buttons.set(\"dpad down\", { type: \"button\", index: 13 });\nm3.buttons.set(\"dpad left\", { type: \"button\", index: 14 });\nm3.buttons.set(\"dpad right\", { type: \"button\", index: 15 });\nm3.buttons.set(\"dpad up\", { type: \"button\", index: 12 });\nm3.buttons.set(\"home\", { type: \"button\", index: 16 });\nm3.buttons.set(\"left shoulder\", { type: \"button\", index: 4 });\nm3.buttons.set(\"left stick\", { type: \"button\", index: 10 });\nm3.buttons.set(\"left stick down\", { type: \"axis\", index: 1, direction: 1 });\nm3.buttons.set(\"left stick left\", { type: \"axis\", index: 0, direction: -1 });\nm3.buttons.set(\"left stick right\", { type: \"axis\", index: 0, direction: 1 });\nm3.buttons.set(\"left stick up\", { type: \"axis\", index: 1, direction: -1 });\nm3.buttons.set(\"left trigger\", { type: \"button\", index: 6 });\nm3.buttons.set(\"right shoulder\", { type: \"button\", index: 5 });\nm3.buttons.set(\"right stick\", { type: \"button\", index: 11 });\nm3.buttons.set(\"right stick down\", { type: \"axis\", index: 3, direction: 1 });\nm3.buttons.set(\"right stick left\", { type: \"axis\", index: 2, direction: -1 });\nm3.buttons.set(\"right stick right\", { type: \"axis\", index: 2, direction: 1 });\nm3.buttons.set(\"right stick up\", { type: \"axis\", index: 3, direction: -1 });\nm3.buttons.set(\"right trigger\", { type: \"button\", index: 7 });\nm3.buttons.set(\"start\", { type: \"button\", index: 9 });\nm3.buttons.set(\"x\", { type: \"button\", index: 2 });\nm3.buttons.set(\"y\", { type: \"button\", index: 3 });\nm3.buttons.set(\"left stick x\", { type: \"axis\", index: 0, inverse: false });\nm3.buttons.set(\"left stick y\", { type: \"axis\", index: 1, inverse: false });\nm3.buttons.set(\"right stick x\", { type: \"axis\", index: 2, inverse: false });\nm3.buttons.set(\"right stick y\", { type: \"axis\", index: 3, inverse: false });\nconst m4 = {\n  name: \"PS4 Firefox OSX\",\n  buttons: new Map(),\n  axes: new Map(),\n  supported: [\n    { browser: \"Firefox\", id: \"54c-5c4-Wireless Controller\", os: \"Mac OS X\" },\n  ],\n};\nmappings.push(m4);\nm4.buttons.set(\"a\", { type: \"button\", index: 0 });\nm4.buttons.set(\"b\", { type: \"button\", index: 1 });\nm4.buttons.set(\"back\", { type: \"button\", index: 8 });\nm4.buttons.set(\"dpad down\", { type: \"button\", index: 15 });\nm4.buttons.set(\"dpad left\", { type: \"button\", index: 16 });\nm4.buttons.set(\"dpad right\", { type: \"button\", index: 17 });\nm4.buttons.set(\"dpad up\", { type: \"button\", index: 14 });\nm4.buttons.set(\"home\", { type: \"button\", index: 12 });\nm4.buttons.set(\"left shoulder\", { type: \"button\", index: 4 });\nm4.buttons.set(\"left stick\", { type: \"button\", index: 10 });\nm4.buttons.set(\"left stick down\", { type: \"axis\", index: 1, direction: 1 });\nm4.buttons.set(\"left stick left\", { type: \"axis\", index: 0, direction: -1 });\nm4.buttons.set(\"left stick right\", { type: \"axis\", index: 0, direction: 1 });\nm4.buttons.set(\"left stick up\", { type: \"axis\", index: 1, direction: -1 });\nm4.buttons.set(\"left trigger\", { type: \"button\", index: 6 });\nm4.buttons.set(\"right shoulder\", { type: \"button\", index: 5 });\nm4.buttons.set(\"right stick\", { type: \"button\", index: 11 });\nm4.buttons.set(\"right stick down\", { type: \"axis\", index: 5, direction: 1 });\nm4.buttons.set(\"right stick left\", { type: \"axis\", index: 2, direction: -1 });\nm4.buttons.set(\"right stick right\", { type: \"axis\", index: 2, direction: 1 });\nm4.buttons.set(\"right stick up\", { type: \"axis\", index: 5, direction: -1 });\nm4.buttons.set(\"right trigger\", { type: \"button\", index: 7 });\nm4.buttons.set(\"start\", { type: \"button\", index: 9 });\nm4.buttons.set(\"x\", { type: \"button\", index: 2 });\nm4.buttons.set(\"y\", { type: \"button\", index: 3 });\nm4.buttons.set(\"dpad x\", { type: \"axis\", index: 6, inverse: false });\nm4.buttons.set(\"dpad y\", { type: \"axis\", index: 7, inverse: false });\nm4.buttons.set(\"left stick x\", { type: \"axis\", index: 0, inverse: false });\nm4.buttons.set(\"left stick y\", { type: \"axis\", index: 1, inverse: false });\nm4.buttons.set(\"right stick x\", { type: \"axis\", index: 2, inverse: false });\nm4.buttons.set(\"right stick y\", { type: \"axis\", index: 5, inverse: false });\nconst m5 = {\n  name: \"Logitech F310 (DirectInput) Firefox Windows\",\n  buttons: new Map(),\n  axes: new Map(),\n  supported: [\n    {\n      browser: \"Firefox\",\n      id: \"046d-c216-Logitech Dual Action\",\n      os: \"Windows NT\",\n    },\n  ],\n};\nmappings.push(m5);\nm5.buttons.set(\"a\", { type: \"button\", index: 1 });\nm5.buttons.set(\"b\", { type: \"button\", index: 2 });\nm5.buttons.set(\"back\", { type: \"button\", index: 8 });\nm5.buttons.set(\"dpad down\", { type: \"button\", index: 14 });\nm5.buttons.set(\"dpad left\", { type: \"button\", index: 15 });\nm5.buttons.set(\"dpad right\", { type: \"button\", index: 16 });\nm5.buttons.set(\"dpad up\", { type: \"button\", index: 13 });\nm5.buttons.set(\"left shoulder\", { type: \"button\", index: 4 });\nm5.buttons.set(\"left stick\", { type: \"button\", index: 10 });\nm5.buttons.set(\"left stick down\", { type: \"axis\", index: 1, direction: 1 });\nm5.buttons.set(\"left stick left\", { type: \"axis\", index: 0, direction: -1 });\nm5.buttons.set(\"left stick right\", { type: \"axis\", index: 0, direction: 1 });\nm5.buttons.set(\"left stick up\", { type: \"axis\", index: 1, direction: -1 });\nm5.buttons.set(\"left trigger\", { type: \"button\", index: 6 });\nm5.buttons.set(\"right shoulder\", { type: \"button\", index: 5 });\nm5.buttons.set(\"right stick\", { type: \"button\", index: 11 });\nm5.buttons.set(\"right stick down\", { type: \"axis\", index: 3, direction: 1 });\nm5.buttons.set(\"right stick left\", { type: \"axis\", index: 2, direction: -1 });\nm5.buttons.set(\"right stick right\", { type: \"axis\", index: 2, direction: 1 });\nm5.buttons.set(\"right stick up\", { type: \"axis\", index: 3, direction: -1 });\nm5.buttons.set(\"right trigger\", { type: \"button\", index: 7 });\nm5.buttons.set(\"start\", { type: \"button\", index: 9 });\nm5.buttons.set(\"x\", { type: \"button\", index: 0 });\nm5.buttons.set(\"y\", { type: \"button\", index: 3 });\nm5.buttons.set(\"dpad x\", { type: \"axis\", index: 6, inverse: false });\nm5.buttons.set(\"dpad y\", { type: \"axis\", index: 7, inverse: false });\nm5.buttons.set(\"left stick x\", { type: \"axis\", index: 0, inverse: false });\nm5.buttons.set(\"left stick y\", { type: \"axis\", index: 1, inverse: false });\nm5.buttons.set(\"right stick x\", { type: \"axis\", index: 2, inverse: false });\nm5.buttons.set(\"right stick y\", { type: \"axis\", index: 3, inverse: false });\nm5.buttons.set(\"right trigger\", { type: \"axis\", index: 5, inverse: false });\nconst m6 = {\n  name: \"Xbox 360 FF Windows\",\n  buttons: new Map(),\n  axes: new Map(),\n  supported: [{ browser: \"Firefox\", id: \"xinput\", os: \"Windows NT\" }],\n};\nmappings.push(m6);\nm6.buttons.set(\"a\", { type: \"button\", index: 0 });\nm6.buttons.set(\"b\", { type: \"button\", index: 1 });\nm6.buttons.set(\"back\", { type: \"button\", index: 8 });\nm6.buttons.set(\"dpad down\", { type: \"button\", index: 13 });\nm6.buttons.set(\"dpad left\", { type: \"button\", index: 14 });\nm6.buttons.set(\"dpad right\", { type: \"button\", index: 15 });\nm6.buttons.set(\"dpad up\", { type: \"button\", index: 12 });\nm6.buttons.set(\"left shoulder\", { type: \"button\", index: 4 });\nm6.buttons.set(\"left stick\", { type: \"button\", index: 10 });\nm6.buttons.set(\"left stick down\", { type: \"axis\", index: 1, direction: 1 });\nm6.buttons.set(\"left stick left\", { type: \"axis\", index: 0, direction: -1 });\nm6.buttons.set(\"left stick right\", { type: \"axis\", index: 0, direction: 1 });\nm6.buttons.set(\"left stick up\", { type: \"axis\", index: 1, direction: -1 });\nm6.buttons.set(\"left trigger\", { type: \"button\", index: 6 });\nm6.buttons.set(\"right shoulder\", { type: \"button\", index: 5 });\nm6.buttons.set(\"right stick\", { type: \"button\", index: 11 });\nm6.buttons.set(\"right stick down\", { type: \"axis\", index: 3, direction: 1 });\nm6.buttons.set(\"right stick left\", { type: \"axis\", index: 2, direction: -1 });\nm6.buttons.set(\"right stick right\", { type: \"axis\", index: 2, direction: 1 });\nm6.buttons.set(\"right stick up\", { type: \"axis\", index: 3, direction: -1 });\nm6.buttons.set(\"right trigger\", { type: \"button\", index: 7 });\nm6.buttons.set(\"start\", { type: \"button\", index: 9 });\nm6.buttons.set(\"x\", { type: \"button\", index: 2 });\nm6.buttons.set(\"y\", { type: \"button\", index: 3 });\nm6.buttons.set(\"dpad x\", { type: \"axis\", index: 6, inverse: false });\nm6.buttons.set(\"dpad y\", { type: \"axis\", index: 7, inverse: false });\nm6.buttons.set(\"left stick x\", { type: \"axis\", index: 0, inverse: false });\nm6.buttons.set(\"left stick y\", { type: \"axis\", index: 1, inverse: false });\nm6.buttons.set(\"right stick x\", { type: \"axis\", index: 2, inverse: false });\nm6.buttons.set(\"right stick y\", { type: \"axis\", index: 3, inverse: false });\nm6.buttons.set(\"right trigger\", { type: \"axis\", index: 5, inverse: false });\nconst m7 = {\n  name: \"XBone Chrome Linux\",\n  buttons: new Map(),\n  axes: new Map(),\n  supported: [\n    {\n      browser: \"Chrome\",\n      id: \"Microsoft Controller (Vendor: 045e Product: 02d1)\",\n      os: \"Linux\",\n    },\n  ],\n};\nmappings.push(m7);\nm7.buttons.set(\"a\", { type: \"button\", index: 0 });\nm7.buttons.set(\"b\", { type: \"button\", index: 1 });\nm7.buttons.set(\"back\", { type: \"button\", index: 6 });\nm7.buttons.set(\"dpad down\", { type: \"axis\", index: 7, direction: 1 });\nm7.buttons.set(\"dpad left\", { type: \"axis\", index: 6, direction: -1 });\nm7.buttons.set(\"dpad right\", { type: \"axis\", index: 6, direction: 1 });\nm7.buttons.set(\"dpad up\", { type: \"axis\", index: 7, direction: -1 });\nm7.buttons.set(\"home\", { type: \"button\", index: 8 });\nm7.buttons.set(\"left shoulder\", { type: \"button\", index: 4 });\nm7.buttons.set(\"left stick\", { type: \"button\", index: 9 });\nm7.buttons.set(\"left stick down\", { type: \"axis\", index: 1, direction: 1 });\nm7.buttons.set(\"left stick left\", { type: \"axis\", index: 0, direction: -1 });\nm7.buttons.set(\"left stick right\", { type: \"axis\", index: 0, direction: 1 });\nm7.buttons.set(\"left stick up\", { type: \"axis\", index: 1, direction: -1 });\nm7.buttons.set(\"left trigger\", { type: \"axis\", index: 2, direction: 1 });\nm7.buttons.set(\"right shoulder\", { type: \"button\", index: 5 });\nm7.buttons.set(\"right stick\", { type: \"button\", index: 10 });\nm7.buttons.set(\"right stick down\", { type: \"axis\", index: 4, direction: 1 });\nm7.buttons.set(\"right stick left\", { type: \"axis\", index: 3, direction: -1 });\nm7.buttons.set(\"right stick right\", { type: \"axis\", index: 3, direction: 1 });\nm7.buttons.set(\"right stick up\", { type: \"axis\", index: 4, direction: -1 });\nm7.buttons.set(\"right trigger\", { type: \"axis\", index: 5, direction: 1 });\nm7.buttons.set(\"start\", { type: \"button\", index: 7 });\nm7.buttons.set(\"x\", { type: \"button\", index: 2 });\nm7.buttons.set(\"y\", { type: \"button\", index: 3 });\nm7.buttons.set(\"dpad x\", { type: \"axis\", index: 6, inverse: false });\nm7.buttons.set(\"dpad y\", { type: \"axis\", index: 7, inverse: false });\nm7.buttons.set(\"left stick x\", { type: \"axis\", index: 0, inverse: false });\nm7.buttons.set(\"left stick y\", { type: \"axis\", index: 1, inverse: false });\nm7.buttons.set(\"left trigger\", { type: \"axis\", index: 2, inverse: false });\nm7.buttons.set(\"right stick x\", { type: \"axis\", index: 3, inverse: false });\nm7.buttons.set(\"right stick y\", { type: \"axis\", index: 4, inverse: false });\nm7.buttons.set(\"right trigger\", { type: \"axis\", index: 5, inverse: false });\nconst m8 = {\n  name: \"Logitech F310 (DirectInput) Firefox OSX\",\n  buttons: new Map(),\n  axes: new Map(),\n  supported: [\n    { browser: \"Firefox\", id: \"46d-c216-Logitech Dual Action\", os: \"Mac OS X\" },\n  ],\n};\nmappings.push(m8);\nm8.buttons.set(\"a\", { type: \"button\", index: 1 });\nm8.buttons.set(\"b\", { type: \"button\", index: 2 });\nm8.buttons.set(\"back\", { type: \"button\", index: 8 });\nm8.buttons.set(\"dpad down\", { type: \"button\", index: 13 });\nm8.buttons.set(\"dpad left\", { type: \"button\", index: 14 });\nm8.buttons.set(\"dpad right\", { type: \"button\", index: 15 });\nm8.buttons.set(\"dpad up\", { type: \"button\", index: 12 });\nm8.buttons.set(\"left shoulder\", { type: \"button\", index: 4 });\nm8.buttons.set(\"left stick\", { type: \"button\", index: 10 });\nm8.buttons.set(\"left stick down\", { type: \"axis\", index: 2, direction: 1 });\nm8.buttons.set(\"left stick left\", { type: \"axis\", index: 1, direction: -1 });\nm8.buttons.set(\"left stick right\", { type: \"axis\", index: 1, direction: 1 });\nm8.buttons.set(\"left stick up\", { type: \"axis\", index: 2, direction: -1 });\nm8.buttons.set(\"left trigger\", { type: \"button\", index: 6 });\nm8.buttons.set(\"right shoulder\", { type: \"button\", index: 5 });\nm8.buttons.set(\"right stick\", { type: \"button\", index: 11 });\nm8.buttons.set(\"right stick down\", { type: \"axis\", index: 4, direction: 1 });\nm8.buttons.set(\"right stick left\", { type: \"axis\", index: 3, direction: -1 });\nm8.buttons.set(\"right stick up\", { type: \"axis\", index: 4, direction: -1 });\nm8.buttons.set(\"right trigger\", { type: \"button\", index: 7 });\nm8.buttons.set(\"start\", { type: \"button\", index: 9 });\nm8.buttons.set(\"x\", { type: \"button\", index: 0 });\nm8.buttons.set(\"y\", { type: \"button\", index: 3 });\nm8.buttons.set(\"dpad x\", { type: \"axis\", index: 6, inverse: false });\nm8.buttons.set(\"dpad y\", { type: \"axis\", index: 7, inverse: false });\nm8.buttons.set(\"left stick x\", { type: \"axis\", index: 0, inverse: false });\nm8.buttons.set(\"left stick y\", { type: \"axis\", index: 1, inverse: false });\nm8.buttons.set(\"left trigger\", { type: \"axis\", index: 2, inverse: false });\nm8.buttons.set(\"right stick x\", { type: \"axis\", index: 3, inverse: false });\nm8.buttons.set(\"right stick y\", { type: \"axis\", index: 4, inverse: false });\nm8.buttons.set(\"right trigger\", { type: \"axis\", index: 5, inverse: false });\nconst m9 = {\n  name: \"PLAYSTATION(R)3 Controller (STANDARD GAMEPAD Vendor: 054c Product: 0268) Chrome OSX Linux\",\n  buttons: new Map(),\n  axes: new Map(),\n  supported: [\n    {\n      browser: \"Chrome\",\n      id: \"PLAYSTATION(R)3 Controller (STANDARD GAMEPAD Vendor: 054c Product: 0268)\",\n      os: \"Mac OS X\",\n    },\n    {\n      browser: \"Chrome\",\n      id: \"Sony PLAYSTATION(R)3 Controller (STANDARD GAMEPAD Vendor: 054c Product: 0268)\",\n      os: \"Linux\",\n    },\n  ],\n};\nmappings.push(m9);\nm9.buttons.set(\"a\", { type: \"button\", index: 0 });\nm9.buttons.set(\"b\", { type: \"button\", index: 1 });\nm9.buttons.set(\"back\", { type: \"button\", index: 8 });\nm9.buttons.set(\"dpad down\", { type: \"button\", index: 13 });\nm9.buttons.set(\"dpad left\", { type: \"button\", index: 14 });\nm9.buttons.set(\"dpad right\", { type: \"button\", index: 15 });\nm9.buttons.set(\"dpad up\", { type: \"button\", index: 12 });\nm9.buttons.set(\"home\", { type: \"button\", index: 16 });\nm9.buttons.set(\"left shoulder\", { type: \"button\", index: 4 });\nm9.buttons.set(\"left stick\", { type: \"button\", index: 10 });\nm9.buttons.set(\"left stick down\", { type: \"axis\", index: 1, direction: 1 });\nm9.buttons.set(\"left stick left\", { type: \"axis\", index: 0, direction: -1 });\nm9.buttons.set(\"left stick right\", { type: \"axis\", index: 0, direction: 1 });\nm9.buttons.set(\"left stick up\", { type: \"axis\", index: 1, direction: -1 });\nm9.buttons.set(\"left trigger\", { type: \"button\", index: 6 });\nm9.buttons.set(\"right shoulder\", { type: \"button\", index: 5 });\nm9.buttons.set(\"right stick\", { type: \"button\", index: 11 });\nm9.buttons.set(\"right stick down\", { type: \"axis\", index: 3, direction: 1 });\nm9.buttons.set(\"right stick left\", { type: \"axis\", index: 2, direction: -1 });\nm9.buttons.set(\"right stick right\", { type: \"axis\", index: 2, direction: 1 });\nm9.buttons.set(\"right stick up\", { type: \"axis\", index: 3, direction: -1 });\nm9.buttons.set(\"right trigger\", { type: \"button\", index: 7 });\nm9.buttons.set(\"start\", { type: \"button\", index: 9 });\nm9.buttons.set(\"x\", { type: \"button\", index: 2 });\nm9.buttons.set(\"y\", { type: \"button\", index: 3 });\nm9.buttons.set(\"dpad x\", { type: \"axis\", index: 6, inverse: false });\nm9.buttons.set(\"dpad y\", { type: \"axis\", index: 7, inverse: false });\nm9.buttons.set(\"left stick x\", { type: \"axis\", index: 0, inverse: false });\nm9.buttons.set(\"left stick y\", { type: \"axis\", index: 1, inverse: false });\nm9.buttons.set(\"right stick x\", { type: \"axis\", index: 2, inverse: false });\nm9.buttons.set(\"right stick y\", { type: \"axis\", index: 3, inverse: false });\nm9.buttons.set(\"right trigger\", { type: \"axis\", index: 5, inverse: false });\nconst m10 = {\n  name: \"054c-0268-Sony PLAYSTATION(R)3 Controller Firefox Linux\",\n  buttons: new Map(),\n  axes: new Map(),\n  supported: [\n    {\n      browser: \"Firefox\",\n      id: \"054c-0268-Sony PLAYSTATION(R)3 Controller\",\n      os: \"Linux\",\n    },\n  ],\n};\nmappings.push(m10);\nm10.buttons.set(\"a\", { type: \"button\", index: 14 });\nm10.buttons.set(\"b\", { type: \"button\", index: 13 });\nm10.buttons.set(\"back\", { type: \"button\", index: 0 });\nm10.buttons.set(\"dpad down\", { type: \"button\", index: 6 });\nm10.buttons.set(\"dpad left\", { type: \"button\", index: 7 });\nm10.buttons.set(\"dpad right\", { type: \"button\", index: 5 });\nm10.buttons.set(\"dpad up\", { type: \"button\", index: 4 });\nm10.buttons.set(\"home\", { type: \"button\", index: 16 });\nm10.buttons.set(\"left stick\", { type: \"button\", index: 1 });\nm10.buttons.set(\"left shoulder\", { type: \"button\", index: 10 });\nm10.buttons.set(\"left stick down\", { type: \"axis\", index: 1, direction: 1 });\nm10.buttons.set(\"left stick left\", { type: \"axis\", index: 0, direction: -1 });\nm10.buttons.set(\"left stick right\", { type: \"axis\", index: 0, direction: 1 });\nm10.buttons.set(\"left stick up\", { type: \"axis\", index: 1, direction: -1 });\nm10.buttons.set(\"left trigger\", { type: \"button\", index: 8 });\nm10.buttons.set(\"right stick\", { type: \"button\", index: 2 });\nm10.buttons.set(\"right stick down\", { type: \"axis\", index: 3, direction: 1 });\nm10.buttons.set(\"right stick left\", { type: \"axis\", index: 2, direction: -1 });\nm10.buttons.set(\"right stick right\", { type: \"axis\", index: 2, direction: 1 });\nm10.buttons.set(\"right stick up\", { type: \"axis\", index: 3, direction: -1 });\nm10.buttons.set(\"right trigger\", { type: \"button\", index: 9 });\nm10.buttons.set(\"right shoulder\", { type: \"button\", index: 11 });\nm10.buttons.set(\"start\", { type: \"button\", index: 3 });\nm10.buttons.set(\"x\", { type: \"button\", index: 15 });\nm10.buttons.set(\"y\", { type: \"button\", index: 12 });\nm10.buttons.set(\"dpad x\", { type: \"axis\", index: 6, inverse: false });\nm10.buttons.set(\"dpad y\", { type: \"axis\", index: 7, inverse: false });\nm10.buttons.set(\"left stick x\", { type: \"axis\", index: 0, inverse: false });\nm10.buttons.set(\"left stick y\", { type: \"axis\", index: 1, inverse: false });\nm10.buttons.set(\"left trigger\", { type: \"axis\", index: 12, inverse: false });\nm10.buttons.set(\"right stick x\", { type: \"axis\", index: 2, inverse: false });\nm10.buttons.set(\"right stick y\", { type: \"axis\", index: 3, inverse: false });\nm10.buttons.set(\"right trigger\", { type: \"axis\", index: 13, inverse: false });\nconst m11 = {\n  name: \"Xbox 360 Chrome Windows/OSX\",\n  buttons: new Map(),\n  axes: new Map(),\n  supported: [\n    {\n      browser: \"Chrome\",\n      id: \"Xbox 360 Controller (STANDARD GAMEPAD Vendor: 028e Product: 045e)\",\n      os: \"Mac OS X\",\n    },\n    {\n      browser: \"Chrome\",\n      id: \"Xbox 360 Controller (XInput STANDARD GAMEPAD)\",\n      os: \"Windows NT\",\n    },\n  ],\n};\nmappings.push(m11);\nm11.buttons.set(\"a\", { type: \"button\", index: 0 });\nm11.buttons.set(\"b\", { type: \"button\", index: 1 });\nm11.buttons.set(\"back\", { type: \"button\", index: 8 });\nm11.buttons.set(\"dpad down\", { type: \"button\", index: 13 });\nm11.buttons.set(\"dpad left\", { type: \"button\", index: 14 });\nm11.buttons.set(\"dpad right\", { type: \"button\", index: 15 });\nm11.buttons.set(\"dpad up\", { type: \"button\", index: 12 });\nm11.buttons.set(\"home\", { type: \"button\", index: 16 });\nm11.buttons.set(\"left shoulder\", { type: \"button\", index: 4 });\nm11.buttons.set(\"left stick\", { type: \"button\", index: 10 });\nm11.buttons.set(\"left stick down\", { type: \"axis\", index: 1, direction: 1 });\nm11.buttons.set(\"left stick left\", { type: \"axis\", index: 0, direction: -1 });\nm11.buttons.set(\"left stick right\", { type: \"axis\", index: 0, direction: 1 });\nm11.buttons.set(\"left stick up\", { type: \"axis\", index: 1, direction: -1 });\nm11.buttons.set(\"left trigger\", { type: \"button\", index: 6 });\nm11.buttons.set(\"right shoulder\", { type: \"button\", index: 5 });\nm11.buttons.set(\"right stick\", { type: \"button\", index: 11 });\nm11.buttons.set(\"right stick down\", { type: \"axis\", index: 3, direction: 1 });\nm11.buttons.set(\"right stick left\", { type: \"axis\", index: 2, direction: -1 });\nm11.buttons.set(\"right stick right\", { type: \"axis\", index: 2, direction: 1 });\nm11.buttons.set(\"right stick up\", { type: \"axis\", index: 3, direction: -1 });\nm11.buttons.set(\"right trigger\", { type: \"button\", index: 7 });\nm11.buttons.set(\"start\", { type: \"button\", index: 9 });\nm11.buttons.set(\"x\", { type: \"button\", index: 2 });\nm11.buttons.set(\"y\", { type: \"button\", index: 3 });\nm11.buttons.set(\"dpad x\", { type: \"axis\", index: 6, inverse: false });\nm11.buttons.set(\"dpad y\", { type: \"axis\", index: 7, inverse: false });\nm11.buttons.set(\"left stick x\", { type: \"axis\", index: 0, inverse: false });\nm11.buttons.set(\"left stick y\", { type: \"axis\", index: 1, inverse: false });\nm11.buttons.set(\"right stick x\", { type: \"axis\", index: 2, inverse: false });\nm11.buttons.set(\"right stick y\", { type: \"axis\", index: 3, inverse: false });\nm11.buttons.set(\"right trigger\", { type: \"axis\", index: 5, inverse: false });\nconst m12 = {\n  name: \"PS4 Chrome Windows/OSX\",\n  buttons: new Map(),\n  axes: new Map(),\n  supported: [\n    {\n      browser: \"Chrome\",\n      id: \"Wireless Controller (STANDARD GAMEPAD Vendor: 054c Product: 05c4)\",\n      os: \"Windows NT\",\n    },\n    {\n      browser: \"Chrome\",\n      id: \"Wireless Controller (STANDARD GAMEPAD Vendor: 054c Product: 05c4)\",\n      os: \"Mac OS X\",\n    },\n  ],\n};\nmappings.push(m12);\nm12.buttons.set(\"a\", { type: \"button\", index: 0 });\nm12.buttons.set(\"b\", { type: \"button\", index: 1 });\nm12.buttons.set(\"back\", { type: \"button\", index: 8 });\nm12.buttons.set(\"dpad down\", { type: \"button\", index: 13 });\nm12.buttons.set(\"dpad left\", { type: \"button\", index: 14 });\nm12.buttons.set(\"dpad right\", { type: \"button\", index: 15 });\nm12.buttons.set(\"dpad up\", { type: \"button\", index: 12 });\nm12.buttons.set(\"home\", { type: \"button\", index: 16 });\nm12.buttons.set(\"left shoulder\", { type: \"button\", index: 4 });\nm12.buttons.set(\"left stick\", { type: \"button\", index: 10 });\nm12.buttons.set(\"left stick down\", { type: \"axis\", index: 1, direction: 1 });\nm12.buttons.set(\"left stick left\", { type: \"axis\", index: 0, direction: -1 });\nm12.buttons.set(\"left stick right\", { type: \"axis\", index: 0, direction: 1 });\nm12.buttons.set(\"left stick up\", { type: \"axis\", index: 1, direction: -1 });\nm12.buttons.set(\"left trigger\", { type: \"button\", index: 6 });\nm12.buttons.set(\"right shoulder\", { type: \"button\", index: 5 });\nm12.buttons.set(\"right stick\", { type: \"button\", index: 11 });\nm12.buttons.set(\"right stick down\", { type: \"axis\", index: 3, direction: 1 });\nm12.buttons.set(\"right stick left\", { type: \"axis\", index: 2, direction: -1 });\nm12.buttons.set(\"right stick right\", { type: \"axis\", index: 2, direction: 1 });\nm12.buttons.set(\"right stick up\", { type: \"axis\", index: 3, direction: -1 });\nm12.buttons.set(\"right trigger\", { type: \"button\", index: 7 });\nm12.buttons.set(\"start\", { type: \"button\", index: 9 });\nm12.buttons.set(\"x\", { type: \"button\", index: 2 });\nm12.buttons.set(\"y\", { type: \"button\", index: 3 });\nm12.buttons.set(\"dpad x\", { type: \"axis\", index: 6, inverse: false });\nm12.buttons.set(\"dpad y\", { type: \"axis\", index: 7, inverse: false });\nm12.buttons.set(\"left stick x\", { type: \"axis\", index: 0, inverse: false });\nm12.buttons.set(\"left stick y\", { type: \"axis\", index: 1, inverse: false });\nm12.buttons.set(\"right stick x\", { type: \"axis\", index: 2, inverse: false });\nm12.buttons.set(\"right stick y\", { type: \"axis\", index: 3, inverse: false });\nm12.buttons.set(\"right trigger\", { type: \"axis\", index: 5, inverse: false });\nconst m13 = {\n  name: \"Xbox 360 Firefox Linux\",\n  buttons: new Map(),\n  axes: new Map(),\n  supported: [\n    {\n      browser: \"Firefox\",\n      id: \"045e-028e-Microsoft X-Box 360 pad\",\n      os: \"Linux\",\n    },\n  ],\n};\nmappings.push(m13);\nm13.buttons.set(\"a\", { type: \"button\", index: 0 });\nm13.buttons.set(\"b\", { type: \"button\", index: 1 });\nm13.buttons.set(\"back\", { type: \"button\", index: 6 });\nm13.buttons.set(\"dpad down\", { type: \"axis\", index: 7, direction: 1 });\nm13.buttons.set(\"dpad left\", { type: \"axis\", index: 6, direction: -1 });\nm13.buttons.set(\"dpad right\", { type: \"axis\", index: 6, direction: 1 });\nm13.buttons.set(\"dpad up\", { type: \"axis\", index: 7, direction: -1 });\nm13.buttons.set(\"home\", { type: \"button\", index: 8 });\nm13.buttons.set(\"left shoulder\", { type: \"button\", index: 4 });\nm13.buttons.set(\"left stick\", { type: \"button\", index: 9 });\nm13.buttons.set(\"left stick down\", { type: \"axis\", index: 1, direction: 1 });\nm13.buttons.set(\"left stick left\", { type: \"axis\", index: 0, direction: -1 });\nm13.buttons.set(\"left stick right\", { type: \"axis\", index: 0, direction: 1 });\nm13.buttons.set(\"left stick up\", { type: \"axis\", index: 1, direction: -1 });\nm13.buttons.set(\"left trigger\", { type: \"axis\", index: 2, direction: 1 });\nm13.buttons.set(\"right shoulder\", { type: \"button\", index: 5 });\nm13.buttons.set(\"right stick\", { type: \"button\", index: 10 });\nm13.buttons.set(\"right stick down\", { type: \"axis\", index: 4, direction: 1 });\nm13.buttons.set(\"right stick left\", { type: \"axis\", index: 3, direction: -1 });\nm13.buttons.set(\"right stick right\", { type: \"axis\", index: 3, direction: 1 });\nm13.buttons.set(\"right stick up\", { type: \"axis\", index: 4, direction: -1 });\nm13.buttons.set(\"right trigger\", { type: \"axis\", index: 5, direction: 1 });\nm13.buttons.set(\"start\", { type: \"button\", index: 7 });\nm13.buttons.set(\"x\", { type: \"button\", index: 2 });\nm13.buttons.set(\"y\", { type: \"button\", index: 3 });\nm13.buttons.set(\"dpad x\", { type: \"axis\", index: 6, inverse: false });\nm13.buttons.set(\"dpad y\", { type: \"axis\", index: 7, inverse: false });\nm13.buttons.set(\"left stick x\", { type: \"axis\", index: 0, inverse: false });\nm13.buttons.set(\"left stick y\", { type: \"axis\", index: 1, inverse: false });\nm13.buttons.set(\"left trigger\", { type: \"axis\", index: 2, inverse: false });\nm13.buttons.set(\"right stick x\", { type: \"axis\", index: 3, inverse: false });\nm13.buttons.set(\"right stick y\", { type: \"axis\", index: 4, inverse: false });\nm13.buttons.set(\"right trigger\", { type: \"axis\", index: 5, inverse: false });\nconst m14 = {\n  name: \"Logitech F310 (XInput) Chrome Linux\",\n  buttons: new Map(),\n  axes: new Map(),\n  supported: [\n    {\n      browser: \"Chrome\",\n      id: \"Logitech Gamepad F310 (STANDARD GAMEPAD Vendor: 046d Product: c21d)\",\n      os: \"Linux\",\n    },\n  ],\n};\nmappings.push(m14);\nm14.buttons.set(\"a\", { type: \"button\", index: 0 });\nm14.buttons.set(\"b\", { type: \"button\", index: 1 });\nm14.buttons.set(\"back\", { type: \"button\", index: 8 });\nm14.buttons.set(\"dpad down\", { type: \"button\", index: 13 });\nm14.buttons.set(\"dpad left\", { type: \"button\", index: 14 });\nm14.buttons.set(\"dpad right\", { type: \"button\", index: 15 });\nm14.buttons.set(\"dpad up\", { type: \"button\", index: 12 });\nm14.buttons.set(\"home\", { type: \"button\", index: 16 });\nm14.buttons.set(\"left shoulder\", { type: \"button\", index: 4 });\nm14.buttons.set(\"left stick\", { type: \"button\", index: 10 });\nm14.buttons.set(\"left stick down\", { type: \"axis\", index: 1, direction: 1 });\nm14.buttons.set(\"left stick left\", { type: \"axis\", index: 0, direction: -1 });\nm14.buttons.set(\"left stick right\", { type: \"axis\", index: 0, direction: 1 });\nm14.buttons.set(\"left stick up\", { type: \"axis\", index: 1, direction: -1 });\nm14.buttons.set(\"left trigger\", { type: \"button\", index: 6 });\nm14.buttons.set(\"right shoulder\", { type: \"button\", index: 5 });\nm14.buttons.set(\"right stick\", { type: \"button\", index: 11 });\nm14.buttons.set(\"right stick down\", { type: \"axis\", index: 3, direction: 1 });\nm14.buttons.set(\"right stick left\", { type: \"axis\", index: 2, direction: -1 });\nm14.buttons.set(\"right stick right\", { type: \"axis\", index: 2, direction: 1 });\nm14.buttons.set(\"right stick up\", { type: \"axis\", index: 3, direction: -1 });\nm14.buttons.set(\"right trigger\", { type: \"button\", index: 7 });\nm14.buttons.set(\"start\", { type: \"button\", index: 9 });\nm14.buttons.set(\"x\", { type: \"button\", index: 2 });\nm14.buttons.set(\"y\", { type: \"button\", index: 3 });\nm14.buttons.set(\"dpad x\", { type: \"axis\", index: 6, inverse: false });\nm14.buttons.set(\"dpad y\", { type: \"axis\", index: 7, inverse: false });\nm14.buttons.set(\"left stick x\", { type: \"axis\", index: 0, inverse: false });\nm14.buttons.set(\"left stick y\", { type: \"axis\", index: 1, inverse: false });\nm14.buttons.set(\"right stick x\", { type: \"axis\", index: 2, inverse: false });\nm14.buttons.set(\"right stick y\", { type: \"axis\", index: 3, inverse: false });\nm14.buttons.set(\"right trigger\", { type: \"axis\", index: 5, inverse: false });\nconst m15 = {\n  name: \"Logitech F310 (DirectInput) Chrome Windows/OSX\",\n  buttons: new Map(),\n  axes: new Map(),\n  supported: [\n    {\n      browser: \"Chrome\",\n      id: \"Logitech Dual Action (STANDARD GAMEPAD Vendor: 046d Product: c216)\",\n      os: \"Mac OS X\",\n    },\n    {\n      browser: \"Chrome\",\n      id: \"Logitech Dual Action (STANDARD GAMEPAD Vendor: 046d Product: c216)\",\n      os: \"Windows NT\",\n    },\n  ],\n};\nmappings.push(m15);\nm15.buttons.set(\"a\", { type: \"button\", index: 0 });\nm15.buttons.set(\"b\", { type: \"button\", index: 1 });\nm15.buttons.set(\"back\", { type: \"button\", index: 8 });\nm15.buttons.set(\"dpad down\", { type: \"button\", index: 13 });\nm15.buttons.set(\"dpad left\", { type: \"button\", index: 14 });\nm15.buttons.set(\"dpad right\", { type: \"button\", index: 15 });\nm15.buttons.set(\"dpad up\", { type: \"button\", index: 12 });\nm15.buttons.set(\"left shoulder\", { type: \"button\", index: 4 });\nm15.buttons.set(\"left stick\", { type: \"button\", index: 10 });\nm15.buttons.set(\"left stick down\", { type: \"axis\", index: 1, direction: 1 });\nm15.buttons.set(\"left stick left\", { type: \"axis\", index: 0, direction: -1 });\nm15.buttons.set(\"left stick right\", { type: \"axis\", index: 0, direction: 1 });\nm15.buttons.set(\"left stick up\", { type: \"axis\", index: 1, direction: -1 });\nm15.buttons.set(\"left trigger\", { type: \"button\", index: 6 });\nm15.buttons.set(\"right shoulder\", { type: \"button\", index: 5 });\nm15.buttons.set(\"right stick\", { type: \"button\", index: 11 });\nm15.buttons.set(\"right stick down\", { type: \"axis\", index: 3, direction: 1 });\nm15.buttons.set(\"right stick left\", { type: \"axis\", index: 2, direction: -1 });\nm15.buttons.set(\"right stick right\", { type: \"axis\", index: 2, direction: 1 });\nm15.buttons.set(\"right stick up\", { type: \"axis\", index: 3, direction: -1 });\nm15.buttons.set(\"right trigger\", { type: \"button\", index: 7 });\nm15.buttons.set(\"start\", { type: \"button\", index: 9 });\nm15.buttons.set(\"x\", { type: \"button\", index: 2 });\nm15.buttons.set(\"y\", { type: \"button\", index: 3 });\nm15.buttons.set(\"dpad x\", { type: \"axis\", index: 6, inverse: false });\nm15.buttons.set(\"dpad y\", { type: \"axis\", index: 7, inverse: false });\nm15.buttons.set(\"left stick x\", { type: \"axis\", index: 0, inverse: false });\nm15.buttons.set(\"left stick y\", { type: \"axis\", index: 1, inverse: false });\nm15.buttons.set(\"right stick x\", { type: \"axis\", index: 2, inverse: false });\nm15.buttons.set(\"right stick y\", { type: \"axis\", index: 3, inverse: false });\nm15.buttons.set(\"right trigger\", { type: \"axis\", index: 5, inverse: false });\nconst m16 = {\n  name: \"PS4 Chrome Linux\",\n  buttons: new Map(),\n  axes: new Map(),\n  supported: [\n    {\n      browser: \"Chrome\",\n      id: \"Sony Computer Entertainment Wireless Controller (STANDARD GAMEPAD Vendor: 054c Product: 05c4)\",\n      os: \"Linux\",\n    },\n  ],\n};\nmappings.push(m16);\nm16.buttons.set(\"a\", { type: \"button\", index: 0 });\nm16.buttons.set(\"b\", { type: \"button\", index: 1 });\nm16.buttons.set(\"back\", { type: \"button\", index: 8 });\nm16.buttons.set(\"dpad down\", { type: \"button\", index: 13 });\nm16.buttons.set(\"dpad left\", { type: \"button\", index: 14 });\nm16.buttons.set(\"dpad right\", { type: \"button\", index: 15 });\nm16.buttons.set(\"dpad up\", { type: \"button\", index: 12 });\nm16.buttons.set(\"home\", { type: \"button\", index: 16 });\nm16.buttons.set(\"left shoulder\", { type: \"button\", index: 4 });\nm16.buttons.set(\"left stick\", { type: \"button\", index: 10 });\nm16.buttons.set(\"left stick down\", { type: \"axis\", index: 1, direction: 1 });\nm16.buttons.set(\"left stick left\", { type: \"axis\", index: 0, direction: -1 });\nm16.buttons.set(\"left stick right\", { type: \"axis\", index: 0, direction: 1 });\nm16.buttons.set(\"left stick up\", { type: \"axis\", index: 1, direction: -1 });\nm16.buttons.set(\"left trigger\", { type: \"button\", index: 6 });\nm16.buttons.set(\"right shoulder\", { type: \"button\", index: 5 });\nm16.buttons.set(\"right stick\", { type: \"button\", index: 11 });\nm16.buttons.set(\"right stick down\", { type: \"axis\", index: 3, direction: 1 });\nm16.buttons.set(\"right stick left\", { type: \"axis\", index: 2, direction: -1 });\nm16.buttons.set(\"right stick right\", { type: \"axis\", index: 2, direction: 1 });\nm16.buttons.set(\"right stick up\", { type: \"axis\", index: 3, direction: -1 });\nm16.buttons.set(\"right trigger\", { type: \"button\", index: 7 });\nm16.buttons.set(\"start\", { type: \"button\", index: 9 });\nm16.buttons.set(\"x\", { type: \"button\", index: 2 });\nm16.buttons.set(\"y\", { type: \"button\", index: 3 });\nm16.buttons.set(\"dpad x\", { type: \"button\", index: 15, indexNegative: 14 });\nm16.buttons.set(\"dpad y\", { type: \"button\", index: 13, indexNegative: 12 });\nm16.buttons.set(\"left stick x\", { type: \"axis\", index: 0, inverse: false });\nm16.buttons.set(\"left stick y\", { type: \"axis\", index: 1, inverse: false });\nm16.buttons.set(\"left trigger\", { type: \"button\", index: 6 });\nm16.buttons.set(\"right stick x\", { type: \"axis\", index: 2, inverse: false });\nm16.buttons.set(\"right stick y\", { type: \"axis\", index: 3, inverse: false });\nm16.buttons.set(\"right trigger\", { type: \"button\", index: 7 });\nconst m17 = {\n  name: \"Xbone Firefox Linux\",\n  buttons: new Map(),\n  axes: new Map(),\n  supported: [\n    {\n      browser: \"Firefox\",\n      id: \"045e-02d1-Microsoft X-Box One pad\",\n      os: \"Linux\",\n    },\n  ],\n};\nmappings.push(m17);\nm17.buttons.set(\"a\", { type: \"button\", index: 0 });\nm17.buttons.set(\"b\", { type: \"button\", index: 1 });\nm17.buttons.set(\"back\", { type: \"button\", index: 6 });\nm17.buttons.set(\"dpad down\", { type: \"axis\", index: 7, direction: 1 });\nm17.buttons.set(\"dpad left\", { type: \"axis\", index: 6, direction: -1 });\nm17.buttons.set(\"dpad right\", { type: \"axis\", index: 6, direction: 1 });\nm17.buttons.set(\"dpad up\", { type: \"axis\", index: 7, direction: -1 });\nm17.buttons.set(\"home\", { type: \"button\", index: 8 });\nm17.buttons.set(\"left shoulder\", { type: \"button\", index: 4 });\nm17.buttons.set(\"left stick\", { type: \"button\", index: 9 });\nm17.buttons.set(\"left stick down\", { type: \"axis\", index: 1, direction: 1 });\nm17.buttons.set(\"left stick left\", { type: \"axis\", index: 0, direction: -1 });\nm17.buttons.set(\"left stick right\", { type: \"axis\", index: 0, direction: 1 });\nm17.buttons.set(\"left stick up\", { type: \"axis\", index: 1, direction: -1 });\nm17.buttons.set(\"left trigger\", { type: \"axis\", index: 2, direction: 1 });\nm17.buttons.set(\"right shoulder\", { type: \"button\", index: 5 });\nm17.buttons.set(\"right stick\", { type: \"button\", index: 10 });\nm17.buttons.set(\"right stick down\", { type: \"axis\", index: 4, direction: 1 });\nm17.buttons.set(\"right stick left\", { type: \"axis\", index: 3, direction: -1 });\nm17.buttons.set(\"right stick right\", { type: \"axis\", index: 3, direction: 1 });\nm17.buttons.set(\"right stick up\", { type: \"axis\", index: 4, direction: -1 });\nm17.buttons.set(\"right trigger\", { type: \"axis\", index: 5, direction: 1 });\nm17.buttons.set(\"start\", { type: \"button\", index: 7 });\nm17.buttons.set(\"x\", { type: \"button\", index: 2 });\nm17.buttons.set(\"y\", { type: \"button\", index: 3 });\nm17.buttons.set(\"dpad x\", { type: \"axis\", index: 6, inverse: false });\nm17.buttons.set(\"dpad y\", { type: \"axis\", index: 7, inverse: false });\nm17.buttons.set(\"left stick x\", { type: \"axis\", index: 0, inverse: false });\nm17.buttons.set(\"left stick y\", { type: \"axis\", index: 1, inverse: false });\nm17.buttons.set(\"left trigger\", { type: \"axis\", index: 2, inverse: false });\nm17.buttons.set(\"right stick x\", { type: \"axis\", index: 3, inverse: false });\nm17.buttons.set(\"right stick y\", { type: \"axis\", index: 4, inverse: false });\nm17.buttons.set(\"right trigger\", { type: \"axis\", index: 5, inverse: false });\n","import { crc32 } from \"./utils\";\n\n/**\n * Internal\n * Query to load an asset.\n */\ntype AssetQuery = { name: string; src: string };\n\ntype ImageAsset = CanvasImageSource;\ntype SoundAsset = AudioBuffer;\ntype JsonAsset = object;\ntype FontAsset = string;\n\n/**\n * Internal\n * Generic asset\n */\ntype Asset<T> = { name: string; data: T };\n\n/**\n * AssetTable\n */\nexport class AssetTable {\n  json: Map<string, JsonAsset>;\n  image: Map<string, ImageAsset>;\n  sound: Map<string, SoundAsset>;\n  font: Map<string, FontAsset>;\n  constructor() {\n    this.json = new Map();\n    this.image = new Map();\n    this.sound = new Map();\n    this.font = new Map();\n  }\n}\n\n/**\n * @ignore\n * Asynchronously load an image file from URL\n * @param {string} name - ressource id\n * @param {string} src - ressource URL\n */\nfunction loadImage({ name, src }: AssetQuery): Promise<Asset<ImageAsset>> {\n  return new Promise((resolve, reject) => {\n    const img = new Image();\n\n    img.crossOrigin = \"Anonymous\";\n\n    img.onload = () => resolve({ name, data: img });\n\n    img.onerror = () => reject(new Error(`Couldn't load Image: ${src}`));\n\n    img.src = src;\n  });\n}\n\n/**\n * @ignore\n * Asynchronously load a sound file from URL\n * @param {string} name - ressource id\n * @param {string} src - ressource URL\n */\nasync function loadSound(\n  { name, src }: AssetQuery,\n  ctx: AudioContext\n): Promise<Asset<SoundAsset>> {\n  const res = await fetch(src);\n\n  if (!res.ok) throw new Error(`Couldn't Load Sound: ${src}`);\n\n  const arrayBuffer = await res.arrayBuffer();\n\n  const audioBuffer = await ctx.decodeAudioData(arrayBuffer);\n\n  return { name, data: audioBuffer };\n}\n\n/**\n * @ignore\n * Asynchronously load a JSON file from URL\n * @param {string} name - ressource id\n * @param {string} src - ressource URL\n */\nasync function loadJson({ name, src }: AssetQuery): Promise<Asset<JsonAsset>> {\n  const res = await fetch(src);\n\n  if (!res.ok) throw new Error(`Couldn't load the JSON file: ${src}`);\n\n  const json = await res.json();\n\n  return { name, data: json };\n}\n\n/**\n * @ignore\n * Asynchronously load a font file from URL\n * @param {string} name - ressource id\n * @param {string} src - ressource URL\n */\nasync function loadFont({ name, src }: AssetQuery): Promise<Asset<FontAsset>> {\n  const font = new FontFace(`${name}${crc32(name)}`, `url(${src})`);\n  const loaded = await font.load();\n  (<any>document.fonts).add(loaded);\n  return { name: name, data: loaded.family };\n}\n\n/**\n * @ignore\n * Collect the assets into a map.\n */\nfunction toMap<T>(assets: Asset<T>[]): Map<string, T> {\n  return assets.reduce((m, a) => m.set(a.name, a.data), new Map());\n}\n\n/**\n * A Basic Asset Loader\n */\nexport class Loader {\n  private imageQueue: AssetQuery[];\n  private soundQueue: AssetQuery[];\n  private jsonQueue: AssetQuery[];\n  private fontQueue: AssetQuery[];\n  private loading: boolean;\n  private currentProm: Promise<AssetTable>;\n  private audioCtx: AudioContext | undefined;\n\n  constructor(audioCtx?: AudioContext) {\n    this.imageQueue = [];\n    this.soundQueue = [];\n    this.jsonQueue = [];\n    this.fontQueue = [];\n    this.loading = false;\n    this.audioCtx = audioCtx;\n  }\n\n  /**\n   * add image to the queue\n   * @param {string} name - name of image\n   * @param {string} src - source of image\n   */\n  addImage(name: string, src: string) {\n    this.imageQueue.push({ name, src });\n    return this;\n  }\n\n  /**\n   * add sound to queue\n   * @param {string} name - name of sound\n   * @param {string} src - source of sound\n   */\n  addSound(name: string, src: string) {\n    this.soundQueue.push({ name, src });\n    return this;\n  }\n\n  /**\n   * add json file to queue\n   * @param {string} name - name of json file\n   * @param {string} src - source of json file\n   */\n  addJSON(name: string, src: string) {\n    this.jsonQueue.push({ name, src });\n    return this;\n  }\n\n  /**\n   * add font file to queue\n   * @param {string} name - name of the font\n   * @param {string} src - source of the font\n   */\n  addFont(name: string, src: string) {\n    this.fontQueue.push({ name, src });\n    return this;\n  }\n\n  /**\n   * @ignore\n   * clears the queue of assets\n   */\n  private clearQueue(queue: AssetQuery[]) {\n    while (queue.length) {\n      queue.pop();\n    }\n    return this;\n  }\n\n  /**\n   * reset the loader\n   */\n  reset() {\n    this.clearQueue(this.imageQueue)\n      .clearQueue(this.soundQueue)\n      .clearQueue(this.jsonQueue)\n      .clearQueue(this.fontQueue);\n    this.loading = false;\n  }\n\n  private loadQueries<T, U>(\n    queries: AssetQuery[],\n    loader: (AssetQuery, U) => Promise<Asset<T>>,\n    moreData?: U\n  ): Promise<Asset<T>[]> {\n    return Promise.all(queries.map((e) => loader(e, moreData)));\n  }\n\n  /**\n   * Asynchronous loading of all assets\n   */\n  load(): Promise<AssetTable> {\n    if (this.loading) return this.currentProm;\n\n    this.loading = true;\n    const t = new AssetTable();\n\n    const p = Promise.all([\n      this.loadQueries(this.imageQueue, loadImage).then(\n        (res: Asset<ImageAsset>[]) => {\n          t.image = toMap(res);\n        }\n      ),\n      this.loadQueries(this.jsonQueue, loadJson).then(\n        (res: Asset<JsonAsset>[]) => {\n          t.json = toMap(res);\n        }\n      ),\n      this.loadQueries(this.fontQueue, loadFont).then(\n        (res: Asset<FontAsset>[]) => {\n          t.font = toMap(res);\n        }\n      ),\n      this.audioCtx\n        ? this.loadQueries(this.soundQueue, loadSound, this.audioCtx).then(\n            (res: Asset<SoundAsset>[]) => {\n              t.sound = toMap(res);\n            }\n          )\n        : new Promise((resolve) => resolve(undefined)),\n    ]);\n\n    this.currentProm = p\n      .then(() => {\n        this.reset();\n        return t;\n      })\n      .catch((err) => {\n        this.reset();\n        throw err;\n      });\n\n    return this.currentProm;\n  }\n}\n","export const PI = Math.PI;\nexport const TWO_PI = PI * 2;\nexport const HALF_PI = PI / 2;\n\nconst { ceil, floor, random: mathRandom, min, max } = Math;\n\n/**\n * return a random float between min and max\n */\nexport function random(a = 0, b = 1) {\n  return mathRandom() * (b - a) + a;\n}\n\n/**\n * return a random integer between a and b included\n * @param a {number} default to 0\n * @param b {number} default to 1\n * @example\n * ```\n * import { randomInt } from \"toupie\"\n * const res = randomInt(1, 6) + randomInt(1, 6)  // roll 2d6\n * ```\n */\nexport function randomInt(a = 0, b = 1) {\n  a = ceil(a);\n  b = floor(b);\n\n  return floor(mathRandom() * (b - a + 1)) + a;\n}\n\n/**\n * Copy the array without duplicates\n */\nexport function unique(arr: unknown[]) {\n  return [...new Set(arr)];\n}\n\n/**\n * Randomly shuffle elements of an array in place.\n * @param arr {any} array\n */\nexport function shuffle(arr: unknown[]) {\n  // use Knuth shuffling\n  for (let i = arr.length - 1; i > 0; --i) {\n    const c = arr[i];\n    const j = randomInt(0, i);\n    arr[i] = arr[j];\n    arr[j] = c;\n  }\n  return arr;\n}\n\n/**\n * Split an array into chunks of constant sizes.\n * @param arr {any[]} array\n * @param chunkSize {number} size of chunks\n */\nexport function chunk(arr: unknown[], chunkSize: number) {\n  const chunks = [];\n\n  for (let i = 0; i < arr.length; i += chunkSize) {\n    chunks.push(arr.slice(i, i + chunkSize));\n  }\n\n  return chunks;\n}\n\n/**\n * clamp num between a and b\n */\nexport function clamp(num: number, a: number, b: number) {\n  return max(a, min(num, b));\n}\n\nconst crcTable: number[] = [];\n\nexport function crc32(str: string) {\n  if (crcTable.length == 0) {\n    fillCRCTable();\n  }\n  let crc = 0xffffffff;\n\n  for (let i = 0; i < str.length; i++) {\n    const byte = str.charCodeAt(i);\n    crc = (crc >>> 8) ^ crcTable[(crc ^ byte) & 0xff];\n  }\n\n  return (crc ^ -1) >>> 0;\n}\n\nfunction fillCRCTable() {\n  let c: number;\n  for (let n = 0; n < 256; n++) {\n    c = n;\n    for (let k = 0; k < 8; k++) {\n      c = c & 1 ? 0xedb88320 ^ (c >>> 1) : c >>> 1;\n    }\n    crcTable.push(c);\n  }\n}\n","import { clamp } from \"./utils\";\n\n/**\n * Play sounds\n */\nexport class SoundDriver {\n  mixer: GainNode;\n  ctx: AudioContext;\n\n  constructor() {\n    this.ctx = new AudioContext();\n    this.mixer = this.ctx.createGain();\n  }\n\n  /**\n   * Volume for the mixer, between 0 and 1\n   */\n  get volume(): number {\n    return this.mixer.gain.value;\n  }\n\n  set volume(v: number) {\n    this.mixer.gain.value = clamp(v, 0, 1);\n  }\n\n  /**\n   * play a sound\n   * @param {AudioBuffer} audio sound data as obtained from a loader\n   * @param {number} time length to play in seconds, or 0 to play to the end\n   * @param {boolean} loop if true, the track loops\n   * @example\n   * ```\n   * import { SoundDriver } from \"toupie\";\n   * const sdrive = new SoundDriver();\n   * const jumpSound: AudioBuffer = ...;\n   * sdrive.play(jumpSound);\n   * ```\n   */\n  play(audio: AudioBuffer, time = 0, loop = false) {\n    const source = this.ctx.createBufferSource();\n    source.buffer = audio;\n    source.connect(this.mixer);\n    source.loop = loop;\n    source.start(time);\n    return source;\n  }\n\n  stop(source: AudioBufferSourceNode, time = 0) {\n    source.stop(time);\n    return this;\n  }\n}\n","/* sprite.ts */\n\nimport { Canvas } from \"./canvas\";\nimport { Vec2 } from \"./vec2\";\nimport { Rect } from \"./rect\";\n\n/**\n * Where the sprite anchor is.\n * The anchor is the center of scaling, rotation and flip and the reference point for position.\n */\nexport enum AnchorType {\n  CENTER = \"center\",\n  TOPLEFT = \"topleft\",\n  TOPRIGHT = \"topright\",\n  BOTTOMLEFT = \"bottomleft\",\n  BOTTOMRIGHT = \"bottomright\",\n}\n\n/**\n * A drawable object made from an image ressource.\n * Can be rotated, flipped, scalled and translated around in the canvas.\n */\nexport class Sprite {\n  image: CanvasImageSource;\n  sourceRect: Rect;\n  destRect: Rect;\n  rotation = 0;\n  flipX = false;\n  flipY = false;\n  scale = 1;\n  anchor: AnchorType;\n\n  /**\n   * @param {CanvasImageSource} image sprite image\n   * @param {Rect} sourceRect rectangle in the texture\n   * @param {Rect?} destRect rectangle in the canvas\n   */\n  constructor(image: CanvasImageSource, sourceRect: Rect, destRect?: Rect) {\n    this.image = image;\n    this.anchor = AnchorType.TOPLEFT;\n\n    if (sourceRect.w == 0) {\n      sourceRect.w = this.image.width as number;\n    }\n\n    if (sourceRect.h == 0) {\n      sourceRect.h = this.image.height as number;\n    }\n\n    this.sourceRect = sourceRect;\n\n    if (!destRect) {\n      this.destRect = Rect.null();\n      this.destRect.size = this.sourceRect.size;\n    } else {\n      this.destRect = destRect;\n    }\n  }\n\n  /**\n   * Position of the sprite defined by anchor\n   * Do not set components of the position directly, it will not update it properly.\n   * Instead, assign to the property:\n   * @example\n   * ```\n   * const p = sprite.pos\n   * p.x += 0.5;\n   * sprite.pos = p;\n   * ```\n   */\n  get pos(): Vec2 {\n    switch (this.anchor) {\n      case AnchorType.CENTER:\n        return this.destRect.center;\n      case AnchorType.TOPLEFT:\n        return this.destRect.topleft;\n      case AnchorType.TOPRIGHT:\n        return this.destRect.topright;\n      case AnchorType.BOTTOMLEFT:\n        return this.destRect.bottomleft;\n      case AnchorType.BOTTOMRIGHT:\n        return this.destRect.bottomright;\n      default:\n        return Vec2.null(); // not reached\n    }\n  }\n\n  set pos(v: Vec2) {\n    switch (this.anchor) {\n      case AnchorType.CENTER:\n        this.destRect.center = v;\n        break;\n      case AnchorType.TOPLEFT:\n        this.destRect.topleft = v;\n        break;\n      case AnchorType.TOPRIGHT:\n        this.destRect.topright = v;\n        break;\n      case AnchorType.BOTTOMLEFT:\n        this.destRect.bottomleft = v;\n        break;\n      case AnchorType.BOTTOMRIGHT:\n        this.destRect.bottomright = v;\n        break;\n    }\n  }\n\n  /**\n   * The rect bounding the sprite, taking scaling into account.\n   */\n  get rect(): Rect {\n    // TODO somehow apply all the other transformations before returning\n    const sz = this.destRect.size.mul(Vec2.scal(this.scale));\n    const p = this.pos;\n    const r = Rect.null();\n    r.size = sz;\n    switch (this.anchor) {\n      case AnchorType.CENTER:\n        r.center = p;\n        break;\n      case AnchorType.TOPLEFT:\n        r.topleft = p;\n        break;\n      case AnchorType.TOPRIGHT:\n        r.topright = p;\n        break;\n      case AnchorType.BOTTOMLEFT:\n        r.bottomleft = p;\n        break;\n      case AnchorType.BOTTOMRIGHT:\n        r.bottomright = p;\n        break;\n    }\n    return r;\n  }\n\n  /**\n   * Draw the sprite on a canvas.\n   * @param {Canvas} can\n   */\n  render(can: Canvas) {\n    const ctx = can.ctx;\n    ctx.save();\n\n    const { x, y } = this.pos;\n    ctx.translate(x, y);\n\n    ctx.scale(this.scale, this.scale);\n    ctx.rotate(-this.rotation);\n    ctx.scale(this.flipX ? -1 : 1, this.flipY ? -1 : 1);\n\n    ctx.translate(-x, -y);\n\n    ctx.drawImage(\n      this.image,\n      this.sourceRect.x,\n      this.sourceRect.y,\n      this.sourceRect.w,\n      this.sourceRect.h,\n      this.destRect.x,\n      this.destRect.y,\n      this.destRect.w,\n      this.destRect.h\n    );\n\n    ctx.restore();\n    return this;\n  }\n}\n\n/**\n * Description of an animation\n */\ntype SpriteAnimation = {\n  frameStart: number;\n  frameEnd: number;\n  delay: number;\n  loop: boolean;\n};\n\n/**\n * A sprite that holds an animation based on a sprite sheet.\n * Needs to be updated on each frame for the animation to play.\n */\nexport class AnimatedSprite extends Sprite {\n  frames: Array<Rect>;\n  destRects: Array<Rect>;\n  currentFrame = 0;\n  playing = false;\n  time = 0;\n  private animations: Map<string, SpriteAnimation>;\n  private currentAnimation?: SpriteAnimation;\n\n  /**\n   * @param {Canvas} can\n   * @param {image} spriteSheet\n   * @param {Rect[]} frames a set of rectangle delimiting the part of the sprite sheet for each frame.\n   * @param {Rect[]?} destRects a set of return delimiting the zone where the frame must be drawn.\n   * The position of the destRects is overwritten as the sprite is moved around.\n   */\n  constructor(image: CanvasImageSource, frames: Rect[], destRects?: Rect[]) {\n    super(image, Rect.null(), Rect.null());\n\n    this.frames = frames;\n\n    if (!destRects) {\n      this.destRects = this.frames.map((r) => {\n        const dest = Rect.null();\n        dest.size = r.size;\n        return dest;\n      });\n    } else {\n      this.destRects = destRects;\n    }\n\n    this.destRect = this.destRects[0];\n\n    this.animations = new Map();\n  }\n\n  /**\n   * Position of the sprite defined by anchor\n   * Do not set components of the position directly, it will not update it properly.\n   * Instead, assign to the property:\n   * @example\n   * ```\n   * const p = sprite.pos\n   * p.x += 0.5;\n   * sprite.pos = p;\n   * ```\n   */\n  get pos(): Vec2 {\n    switch (this.anchor) {\n      case AnchorType.TOPLEFT:\n        return this.destRect.topleft;\n      case AnchorType.CENTER:\n        return this.destRect.center;\n      case AnchorType.TOPRIGHT:\n        return this.destRect.topright;\n      case AnchorType.BOTTOMLEFT:\n        return this.destRect.bottomleft;\n      case AnchorType.BOTTOMRIGHT:\n        return this.destRect.bottomright;\n      default:\n        return Vec2.null(); // not reached\n    }\n  }\n\n  set pos(v: Vec2) {\n    switch (this.anchor) {\n      case AnchorType.TOPLEFT:\n        this.destRect.topleft = v;\n        break;\n      case AnchorType.CENTER:\n        this.destRect.center = v;\n        break;\n      case AnchorType.TOPRIGHT:\n        this.destRect.topright = v;\n        break;\n      case AnchorType.BOTTOMLEFT:\n        this.destRect.bottomleft = v;\n        break;\n      case AnchorType.BOTTOMRIGHT:\n        this.destRect.bottomright = v;\n        break;\n    }\n  }\n\n  /**\n   * add animation\n   * @param {string} animationName name of animation\n   * @param {number} frameStart frame to begin from\n   * @param {number} frameEnd frame to end at\n   * @param {number} delay delay between each frame\n   */\n  addAnimation(\n    animationName: string,\n    frameStart: number,\n    frameEnd: number,\n    delay: number,\n    loop?: boolean\n  ) {\n    if (this.animations.has(animationName)) {\n      throw new Error(`Animation with name \"${animationName}\" already exists.`);\n    }\n\n    if (frameStart < 0) {\n      frameStart += this.frames.length;\n    }\n\n    if (frameEnd < 0) {\n      frameEnd += this.frames.length;\n    }\n\n    loop = loop ?? true;\n    const animation: SpriteAnimation = {\n      frameStart,\n      frameEnd,\n      delay,\n      loop,\n    };\n\n    this.animations.set(animationName, animation);\n\n    return this;\n  }\n\n  /**\n   * play animation\n   * @param {string} animationName name of animation to play\n   */\n  play(animationName: string) {\n    this.currentAnimation = this.animations.get(animationName);\n\n    if (this.currentAnimation) {\n      this.currentFrame = this.currentAnimation.frameStart;\n      this.applyCurrentFrame();\n      this.playing = true;\n      this.time = 0;\n    } else {\n      throw new Error(\n        `Animation with name \"${animationName}\" does not exists.`\n      );\n    }\n    return this;\n  }\n\n  /**\n   * stop the sprite animation\n   */\n  stop() {\n    this.playing = false;\n    return this;\n  }\n\n  /**\n   * @ignore\n   * Internal procedure to make the frame change effective.\n   */\n  private applyCurrentFrame() {\n    const p = this.pos;\n    this.sourceRect = this.frames[this.currentFrame];\n    this.destRect = this.destRects[this.currentFrame];\n\n    this.pos = p;\n  }\n\n  /**\n   * Called on each frame to update sprite states\n   * @param {number} dt delta time\n   */\n  update(dt: number) {\n    if (!this.playing || !this.currentAnimation) return;\n\n    this.time += dt;\n\n    const { frameStart, frameEnd, delay, loop } = this.currentAnimation;\n\n    if (this.time >= delay) {\n      if (this.currentFrame >= frameEnd) {\n        if (loop) {\n          // start over\n          this.currentFrame = frameStart;\n        } else {\n          // hold the last frame\n          this.playing = false;\n          return;\n        }\n      }\n\n      this.currentFrame++;\n\n      this.applyCurrentFrame();\n\n      this.time = 0;\n    }\n    return this;\n  }\n}\n","import { run } from \"./game\";\nimport { InputState } from \"./inputs\";\n\n/**\n * Base class for a game with multiple stages/screens.\n * Use this to easily handle the transitions between various stages.\n * It also has a concept of stage stack to temporarily move to a different stage (pushing it on the stack),\n * keeping the state of the current stage and coming back (poping from the stack).\n */\nexport class StagedGame {\n  stages: Map<string, Stage<StagedGame>>;\n  currentStage: Stage<StagedGame>;\n  stageStack: Stage<StagedGame>[];\n  stopLoop: () => void;\n  input: InputState;\n\n  constructor() {\n    this.stageStack = [];\n    this.input = new InputState();\n    this.stopLoop = () => {\n      return;\n    };\n  }\n\n  /**\n   * Run the game.\n   * Call super.run() if you override this.\n   */\n  run() {\n    this.input.start();\n    this.stopLoop = run({\n      update: (dt) => this.update(dt),\n      render: () => this.render(),\n      stop: () => this.stop(),\n    });\n  }\n\n  /**\n   * Stop the game.\n   */\n  stop() {\n    this.input.stop();\n  }\n\n  /**\n   * Init the game.\n   */\n  init() {\n    this.stages = new Map();\n  }\n\n  /**\n   * Called on each frame to update the states.\n   * Don't override this, instead use the stage update method.\n   */\n  update(dt) {\n    this.currentStage.update(dt);\n  }\n\n  /**\n   * Called on each frame to render the states.\n   * Don't override this, instead use the stage update method.\n   */\n  render() {\n    this.currentStage.render();\n  }\n\n  /**\n   * Add a new stage to the game.\n   */\n  addStage(name: string, stage: Stage<StagedGame>) {\n    this.stages.set(name, stage);\n    return this;\n  }\n\n  /**\n   * Set the current stage, either by name (previously registered with addStage)\n   * or by the Stage object itself.\n   */\n  setStage(stage: string | Stage<StagedGame>) {\n    if (typeof stage == \"string\") {\n      stage = this.stages.get(stage);\n      if (!stage) {\n        throw Error(`There are no stages named ${name}.`);\n      }\n    }\n\n    if (this.currentStage) {\n      this.currentStage.leave();\n      this.stageStack.pop();\n    }\n    this.stopLoop();\n\n    this.stageStack.push(stage);\n    this.currentStage = stage;\n\n    this.currentStage.enter();\n    this.run();\n\n    return this;\n  }\n\n  /**\n   * Temporarily suspend the current stage and move to a new one.\n   */\n  pushStage(stage: string | Stage<StagedGame>) {\n    if (typeof stage == \"string\") {\n      stage = this.stages.get(stage);\n      if (!stage) {\n        throw Error(`There are no stages named ${name}.`);\n      }\n    }\n\n    this.currentStage.pause();\n\n    this.stopLoop();\n\n    this.stageStack.push(stage);\n    this.currentStage = stage;\n\n    this.currentStage.enter();\n    this.run();\n\n    return this;\n  }\n\n  /**\n   * Stop the current stage and go to the previous one.\n   */\n  popStage() {\n    if (this.stageStack.length < 2) {\n      throw Error(\"There are not enough stage on the stack.\");\n    }\n\n    this.currentStage.leave();\n\n    this.stopLoop();\n\n    this.stageStack.pop();\n    const stage = this.stageStack[this.stageStack.length - 1];\n    this.currentStage = stage;\n\n    this.currentStage.resume();\n    this.run();\n\n    return this;\n  }\n}\n\n/**\n * A single stage of the game.\n * Use this with StagedGame.\n */\nexport abstract class Stage<SomeGame extends StagedGame> {\n  game: SomeGame;\n  inited: boolean;\n\n  constructor(game: SomeGame) {\n    this.game = game;\n  }\n\n  /**\n   * Called to prepare the stage for playing.\n   * Call super.init() when overriding.\n   */\n  init() {\n    this.inited = true;\n  }\n\n  /**\n   * Called on each frame to draw the stage.\n   */\n  abstract render();\n\n  /**\n   * Called on each frame to update the game.\n   */\n  abstract update(dt: number);\n\n  /**\n   * Called when transiting to this stage or when pushing on the stack.\n   * Tempory stages are entered only once.\n   */\n  enter() {\n    if (!this.inited) {\n      this.init();\n    }\n  }\n\n  /**\n   * Called when transiting away from this stage or when poping from the stack\n   * When called on a tempory stage, it means that this stage will be lost and\n   * garbage collected.\n   */\n  leave() {\n    return;\n  }\n\n  /**\n   * Called when comming back to this stage after poping another stage\n   */\n  resume() {\n    return;\n  }\n\n  /**\n   * Called when temporarily leaving this stage by pushing another stage.\n   */\n  pause() {\n    return;\n  }\n}\n","/**\n * Save an object in local storage.\n */\nexport function savePersistent(name: string, data: object) {\n  window.localStorage.setItem(name, JSON.stringify(data));\n}\n\n/**\n * Load an object from local storage.\n * If the name is not available in local storage, return null.\n */\nexport function loadPersistent(name: string): object | null {\n  let v;\n  try {\n    v = JSON.parse(window.localStorage.getItem(name));\n  } catch (SyntaxError) {\n    v = null;\n  }\n  return v;\n}\n\n/**\n * Remove on or all records from the local storage.\n */\nexport function clearPersistent(name?: string) {\n  if (name !== undefined) {\n    window.localStorage.removeItem(name);\n  } else {\n    window.localStorage.clear();\n  }\n}\n"],"names":[],"version":3,"file":"toupie.mjs.map"}