From 9d99bea6406fefe8d8d221708d07bebbe726de0f Mon Sep 17 00:00:00 2001
From: Robert Long <robert@robertlong.me>
Date: Mon, 23 Apr 2018 23:21:16 -0700
Subject: [PATCH] Add spawn-point component

---
 src/components/spawn-controller.js | 35 ++++++++++--------------------
 src/gltf-component-mappings.js     |  1 +
 2 files changed, 12 insertions(+), 24 deletions(-)

diff --git a/src/components/spawn-controller.js b/src/components/spawn-controller.js
index eab8314c8..f4f4032d8 100644
--- a/src/components/spawn-controller.js
+++ b/src/components/spawn-controller.js
@@ -1,31 +1,18 @@
 AFRAME.registerComponent("spawn-controller", {
-  schema: {
-    radius: { type: "number", default: 1 }
-  },
-
   init() {
-    const el = this.el;
-    const center = el.getAttribute("position");
-
-    const angleRad = Math.random() * 2 * Math.PI;
-    const circlePoint = this.getPointOnCircle(this.data.radius, angleRad);
-    const worldPoint = {
-      x: circlePoint.x + center.x,
-      y: center.y,
-      z: circlePoint.z + center.z
-    };
-    el.setAttribute("position", worldPoint);
+    const spawnPoints = document.querySelectorAll("[spawn-point]");
 
-    const angleDeg = angleRad * THREE.Math.RAD2DEG;
-    const angleToCenter = -1 * angleDeg + 90;
-    el.setAttribute("rotation", { x: 0, y: angleToCenter, z: 0 });
+    if (spawnPoints.length === 0) {
+      // Keep default position
+      return;
+    }
 
-    el.object3D.updateMatrix();
-  },
+    const spawnPointIndex = Math.round(spawnPoints.length * Math.random());
+    const spawnPoint = spawnPoints[spawnPointIndex];
 
-  getPointOnCircle(radius, angleRad) {
-    const x = Math.cos(angleRad) * radius;
-    const z = Math.sin(angleRad) * radius;
-    return { x: x, z: z };
+    this.el.object3D.position.copy(spawnPoint.object3D.position);
+    this.el.object3D.rotation.copy(spawnPoint.object3D.rotation);
   }
 });
+
+AFRAME.registerComponent("spawn-point", {});
diff --git a/src/gltf-component-mappings.js b/src/gltf-component-mappings.js
index 0f7cbb703..08fa7988b 100644
--- a/src/gltf-component-mappings.js
+++ b/src/gltf-component-mappings.js
@@ -16,6 +16,7 @@ AFRAME.GLTFModelPlus.registerComponent("scale-audio-feedback", "scale-audio-feed
 AFRAME.GLTFModelPlus.registerComponent("loop-animation", "loop-animation");
 AFRAME.GLTFModelPlus.registerComponent("shape", "shape");
 AFRAME.GLTFModelPlus.registerComponent("visible", "visible");
+AFRAME.GLTFModelPlus.registerComponent("spawn-point", "spawn-point");
 AFRAME.GLTFModelPlus.registerComponent("nav-mesh", "nav-mesh", (el, componentName, componentData, gltfPath) => {
   if (componentData.src) {
     componentData.src = resolveURL(componentData.src, gltfPath);
-- 
GitLab