Skip to content
Snippets Groups Projects
Commit 9d99bea6 authored by Robert Long's avatar Robert Long
Browse files

Add spawn-point component

parent cc2a2034
No related branches found
No related tags found
No related merge requests found
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", {});
......@@ -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);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment