From d09a4ca24d4f518dbc5364fc0955bb99977810ed Mon Sep 17 00:00:00 2001 From: Fabien Benetou Date: Sat, 24 Jun 2023 14:32:14 +0200 Subject: [PATCH] attach back docs --- index.html | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 2cd1610..79a5973 100644 --- a/index.html +++ b/index.html @@ -3427,7 +3427,21 @@ AFRAME.registerComponent('knuckles-docs',{ this.worldPosition=new THREE.Vector3(); Array.from( document.querySelectorAll(".docs") ).map( doc => { doc.addEventListener('picked', _ => { doc.classList.remove('docs') }) - // should check on released in order to attach back if close enough + doc.addEventListener('released', _ => { + Array.from( document.querySelectorAll( '.attachablespot' ) ).map( attachable => { + let dist = doc.getAttribute('position').distanceTo( attachable.getAttribute('position') ) + if ( dist < 0.2 ) doc.classList.add('docs') + }) + }) + }) + const attachables = ['pinky-finger-phalanx-intermediate', 'pinky-finger-phalanx-distal', ' pinky-finger-tip'] // somehow tip not available + attachables.map( (attachable, i) => { + let el = document.createElement("a-box") + el.classList.add('attachablespot') + el.setAttribute("scale", '.1 .1 .01') + el.setAttribute("wireframe", true) + el.id = 'attachable-'+attachable + AFRAME.scenes[0].appendChild(el) }) }, tick: function () { @@ -3438,8 +3452,13 @@ AFRAME.registerComponent('knuckles-docs',{ this.el.object3D.traverse( e => { if (e.name == attachable) { worldPosition.copy(e.position);e.parent.updateMatrixWorld();e.parent.localToWorld(worldPosition) rotation = e.rotation.x*180/3.14 + " " + e.rotation.y*180/3.14 + " " + e.rotation.z*180/3.14 + let el = document.getElementById('attachable-'+attachable) + if (el){ + el.setAttribute("rotation", rotation) + el.setAttribute("position", AFRAME.utils.coordinates.stringify( worldPosition ) ) + } if (docs[i] ){ - docs[i].setAttribute("scale", '.1 .1') + docs[i].setAttribute("scale", '.1 .1 .01') docs[i].setAttribute("rotation", rotation) docs[i].setAttribute("position", AFRAME.utils.coordinates.stringify( worldPosition ) ) }