diff --git a/index.html b/index.html index ba69437..8332c7f 100644 --- a/index.html +++ b/index.html @@ -109,10 +109,10 @@ var commandhistory = [] const savedProperties = [ "src", "position", "rotation", "scale", "value", ] // add newer properties e.g visibility and generator as class var groupSelection = [] var cabin -const url = 'https://fabien.benetou.fr/PIMVRdata/CabinData?action=' +const url = "https://fabien.benetou.fr/PIMVRdata/CabinData?action=" var generators = "line-link-entities link screenstack dynamic-view selectionboxonpinches keyboard " + "commands-from-external-json glossary timeline issues web-url background-via-url observableui hidableenvironmentfot fot" -// could be an array proper completed on each component registration +// could be an array proper completed on each relevant component registration // could add a dedicated MakeyMakey mode with a fixed camera, e.g bird eye view, and an action based on some physical input that others, thanks to NAF, could see or even use. // ?inputmode=makeymakey @@ -747,12 +747,44 @@ function setHUD(txt){ document.querySelector("[hud]>a-troika-text").setAttribute("value",txt) } +AFRAME.registerComponent('wristattachsecondary',{ + schema: { + target: {type: 'selector'}, + }, + init: function () { + var el = this.el + this.worldPosition=new THREE.Vector3(); + //var side = this.el.getAttribute("hand-tracking-controls").hand[0] // fails + // (this.el.components) + this.side = "l" + if ( this.el.getAttribute("hand-tracking-controls").indexOf("right") ) this.side = "r" + }, + tick: function () { + // could check if it exists first, or isn't 0 0 0... might re-attach fine, to test + // somehow very far away... need to convert to local coordinate probably + // localToWorld? + var worldPosition=this.worldPosition; + //this.el.object3D.traverse( e => { if (e.name == "b_"+this.side+"_wrist") { + this.el.object3D.traverse( e => { if (e.name == "b_l_wrist") { + 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 + this.data.target.setAttribute("rotation", rotation) + this.data.target.setAttribute("position", + AFRAME.utils.coordinates.stringify( worldPosition ) ) + // doesnt work anymore... + //this.data.target.setAttribute("rotation", AFRAME.utils.coordinates.stringify( e.getAttribute("rotation") ) + } + }) + } +}); + AFRAME.registerComponent('pinchsecondary', { init: function () { this.el.addEventListener('pinchended', function (event) { selectedElement = getClosestTargetElement( event.detail.position ) // if close enough to a target among a list of potential targets, unselect previous target then select new if (selectedElement) interpretJXR( selectedElement.getAttribute("value") ) + selectedElement = null if (setupMode) setupBBox["B"] = event.detail.position if ( setupBBox["A"] && setupBBox["B"] ) { setupMode = false @@ -781,38 +813,7 @@ AFRAME.registerComponent('pinchsecondary', { } }); -AFRAME.registerComponent('wristattachsecondary',{ - schema: { - target: {type: 'selector'}, - }, - init: function () { - var el = this.el - this.worldPosition=new THREE.Vector3(); - //var side = this.el.getAttribute("hand-tracking-controls").hand[0] // fails - // (this.el.components) - this.side = "l" - if ( this.el.getAttribute("hand-tracking-controls").indexOf("right") ) this.side = "r" - }, - tick: function () { - // could check if it exists first, or isn't 0 0 0... might re-attach fine, to test - // somehow very far away... need to convert to local coordinate probably - // localToWorld? - var worldPosition=this.worldPosition; - //this.el.object3D.traverse( e => { if (e.name == "b_"+this.side+"_wrist") { - this.el.object3D.traverse( e => { if (e.name == "b_l_wrist") { - 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 - this.data.target.setAttribute("rotation", rotation) - this.data.target.setAttribute("position", - AFRAME.utils.coordinates.stringify( worldPosition ) ) - // doesnt work anymore... - //this.data.target.setAttribute("rotation", AFRAME.utils.coordinates.stringify( e.getAttribute("rotation") ) - } - }) - } -}); - -AFRAME.registerComponent('pinchprimary', { // currently only 1 hand, the right one +AFRAME.registerComponent('pinchprimary', { // currently only 1 hand, the right one, should be switchable // consider instead https://github.com/AdaRoseCannon/handy-work/blob/main/README-AFRAME.md for specific poses // or https://aframe.io/aframe/examples/showcase/hand-tracking/pinchable.js