/**
 * Used on a player-rig to move the player to a random spawn point on entry.
 * @namespace avatar
 * @component spawn-controller
 */
AFRAME.registerComponent("spawn-controller", {
  schema: {
    target: { type: "selector" },
    loadedEvent: { type: "string" }
  },
  init() {
    this.onLoad = this.onLoad.bind(this);
    this.data.target.addEventListener(this.data.loadedEvent, this.onLoad);
  },
  onLoad() {
    const spawnPoints = document.querySelectorAll("[spawn-point]");

    if (spawnPoints.length === 0) {
      // Keep default position
      return;
    }

    const spawnPointIndex = Math.round((spawnPoints.length - 1) * Math.random());
    const spawnPoint = spawnPoints[spawnPointIndex];

    spawnPoint.object3D.getWorldPosition(this.el.object3D.position);
    this.el.object3D.rotation.copy(spawnPoint.object3D.rotation);
  }
});

/**
 * Marks an entity as a potential spawn point.
 * @namespace environment
 * @component spawn-point
 */
AFRAME.registerComponent("spawn-point", {});