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", { AFRAME.registerComponent("spawn-controller", {
schema: {
radius: { type: "number", default: 1 }
},
init() { init() {
const el = this.el; const spawnPoints = document.querySelectorAll("[spawn-point]");
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 angleDeg = angleRad * THREE.Math.RAD2DEG; if (spawnPoints.length === 0) {
const angleToCenter = -1 * angleDeg + 90; // Keep default position
el.setAttribute("rotation", { x: 0, y: angleToCenter, z: 0 }); return;
}
el.object3D.updateMatrix(); const spawnPointIndex = Math.round(spawnPoints.length * Math.random());
}, const spawnPoint = spawnPoints[spawnPointIndex];
getPointOnCircle(radius, angleRad) { this.el.object3D.position.copy(spawnPoint.object3D.position);
const x = Math.cos(angleRad) * radius; this.el.object3D.rotation.copy(spawnPoint.object3D.rotation);
const z = Math.sin(angleRad) * radius;
return { x: x, z: z };
} }
}); });
AFRAME.registerComponent("spawn-point", {});
...@@ -16,6 +16,7 @@ AFRAME.GLTFModelPlus.registerComponent("scale-audio-feedback", "scale-audio-feed ...@@ -16,6 +16,7 @@ AFRAME.GLTFModelPlus.registerComponent("scale-audio-feedback", "scale-audio-feed
AFRAME.GLTFModelPlus.registerComponent("loop-animation", "loop-animation"); AFRAME.GLTFModelPlus.registerComponent("loop-animation", "loop-animation");
AFRAME.GLTFModelPlus.registerComponent("shape", "shape"); AFRAME.GLTFModelPlus.registerComponent("shape", "shape");
AFRAME.GLTFModelPlus.registerComponent("visible", "visible"); AFRAME.GLTFModelPlus.registerComponent("visible", "visible");
AFRAME.GLTFModelPlus.registerComponent("spawn-point", "spawn-point");
AFRAME.GLTFModelPlus.registerComponent("nav-mesh", "nav-mesh", (el, componentName, componentData, gltfPath) => { AFRAME.GLTFModelPlus.registerComponent("nav-mesh", "nav-mesh", (el, componentName, componentData, gltfPath) => {
if (componentData.src) { if (componentData.src) {
componentData.src = resolveURL(componentData.src, gltfPath); 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