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