|
|
|
@ -154,13 +154,14 @@ AFRAME.registerComponent('pinchprimary', { // currently only 1 hand, the right o |
|
|
|
|
let dist = 100 |
|
|
|
|
if ( document.querySelector("#box") ) |
|
|
|
|
dist = event.detail.position.distanceTo( document.querySelector("#box").object3D.position ) |
|
|
|
|
if (dist < .1){ |
|
|
|
|
if (dist < .1){
|
|
|
|
|
setFeedbackHUD("close enough, replaced shortcut with "+ selectedElement.getAttribute("value") ) |
|
|
|
|
wristShortcut = selectedElement.getAttribute("value") |
|
|
|
|
} |
|
|
|
|
if (selectedElement){ |
|
|
|
|
let content = selectedElement.getAttribute("value") |
|
|
|
|
selectedElement.emit('released', {element:selectedElement, timestamp:Date.now(), primary:true}) |
|
|
|
|
// selectedElement.object3D.rotation.set( 0, 0, 0 ) // billboarding, could need modifier
|
|
|
|
|
} |
|
|
|
|
// unselect current target if any
|
|
|
|
|
selectedElement = null; |
|
|
|
@ -577,7 +578,7 @@ function doublePinchToScale(){ |
|
|
|
|
AFRAME.registerComponent('pressable', { |
|
|
|
|
schema:{pressDistance:{default:0.06}}, |
|
|
|
|
init:function(){this.worldPosition=new THREE.Vector3();this.handEls=document.querySelectorAll('[hand-tracking-controls]');this.pressed=false;}, |
|
|
|
|
tick:function(){var handEls=this.handEls;var handEl;var distance;for(var i=0;i<handEls.length;i++){handEl=handEls[i];distance=this.calculateFingerDistance(handEl.components['hand-tracking-controls'].indexTipPosition);if(distance<this.data.pressDistance){if(!this.pressed){this.el.emit('pressedstarted');} this.pressed=true;return;}} if(this.pressed){this.el.emit('pressedended');} this.pressed=false;}, |
|
|
|
|
tick:function(){var handEls=this.handEls;var handEl;var distance;for(var i=0;i<handEls.length;i++){handEl=handEls[i];distance=this.calculateFingerDistance(handEl.components['hand-tracking-controls'].indexTipPosition);if(distance> 0 && distance<this.data.pressDistance){if(!this.pressed){this.el.emit('pressedstarted');} this.pressed=true;return;}} if(this.pressed){this.el.emit('pressedended');} this.pressed=false;}, |
|
|
|
|
calculateFingerDistance:function(fingerPosition){var el=this.el;var worldPosition=this.worldPosition;worldPosition.copy(el.object3D.position);el.object3D.parent.updateMatrixWorld();el.object3D.parent.localToWorld(worldPosition);return worldPosition.distanceTo(fingerPosition);} |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
@ -587,10 +588,7 @@ AFRAME.registerComponent('start-on-press', { |
|
|
|
|
let el = this.el |
|
|
|
|
this.el.addEventListener('pressedended', function (event) { |
|
|
|
|
console.log(event) |
|
|
|
|
// should ignore that if we entered XR recently
|
|
|
|
|
if (!primaryPinchStarted && wristShortcut.match(prefix)) interpretJXR(wristShortcut) |
|
|
|
|
// seems to happen also when entering VR
|
|
|
|
|
// other action could possibly based on position relative to zones instead, i.e a list of bbox/functions pairs
|
|
|
|
|
}) |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|