Skip to content
Snippets Groups Projects
spawn-controller.js 1006 B
Newer Older
/**
 * Used on a player-rig to move the player to a random spawn point on entry.
 * @namespace avatar
 * @component spawn-controller
 */
Kevin Lee's avatar
Kevin Lee committed
AFRAME.registerComponent("spawn-controller", {
Robert Long's avatar
Robert Long committed
  schema: {
    target: { type: "selector" },
    loadedEvent: { type: "string" }
  },
Kevin Lee's avatar
Kevin Lee committed
  init() {
Robert Long's avatar
Robert Long committed
    this.onLoad = this.onLoad.bind(this);
    this.data.target.addEventListener(this.data.loadedEvent, this.onLoad);
  },
  onLoad() {
Robert Long's avatar
Robert Long committed
    const spawnPoints = document.querySelectorAll("[spawn-point]");
Robert Long's avatar
Robert Long committed
    if (spawnPoints.length === 0) {
      // Keep default position
      return;
    }
Robert Long's avatar
Robert Long committed
    const spawnPointIndex = Math.round((spawnPoints.length - 1) * Math.random());
Robert Long's avatar
Robert Long committed
    const spawnPoint = spawnPoints[spawnPointIndex];
Robert Long's avatar
Robert Long committed
    spawnPoint.object3D.getWorldPosition(this.el.object3D.position);
Robert Long's avatar
Robert Long committed
    this.el.object3D.rotation.copy(spawnPoint.object3D.rotation);
Kevin Lee's avatar
Kevin Lee committed
});
/**
 * Marks an entity as a potential spawn point.
 * @namespace environment
 * @component spawn-point
 */
Robert Long's avatar
Robert Long committed
AFRAME.registerComponent("spawn-point", {});