From ed79a79669cfcf5b12930cd5362048ea03144f0c Mon Sep 17 00:00:00 2001 From: Diego Marcos Date: Tue, 18 Sep 2018 00:37:49 -0700 Subject: [PATCH] Configure saber controls raycaster, cursor and line --- src/components/saber-controls.js | 49 ++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/src/components/saber-controls.js b/src/components/saber-controls.js index 8c1d1cb..d105436 100644 --- a/src/components/saber-controls.js +++ b/src/components/saber-controls.js @@ -12,19 +12,20 @@ AFRAME.registerComponent('saber-controls', { init: function () { var el = this.el; var data = this.data; + el.addEventListener('controllerconnected', this.initSaber.bind(this)); el.setAttribute('oculus-touch-controls', {hand: data.hand, model: false}); el.setAttribute('vive-controls', {hand: data.hand, model: true}); el.setAttribute('windows-motion-controls', {hand: data.hand, model: false}); - el.addEventListener('controllerconnected', this.initSaber.bind(this)); }, - initSaber: function () { + initSaber: function (evt) { var el = this.el; var saberHandleEl = document.createElement('a-entity'); var bladeEl = this.bladeEl = document.createElement('a-entity'); var saberPivotEl = document.createElement('a-entity'); var highlightTop = document.createElement('a-entity'); var highlightBottom = document.createElement('a-entity'); + var controllerConfig = this.config[evt.detail.name]; this.boundingBox = new THREE.Box3(); @@ -52,6 +53,13 @@ AFRAME.registerComponent('saber-controls', { saberPivotEl.appendChild(saberHandleEl); saberPivotEl.appendChild(bladeEl); el.appendChild(saberPivotEl); + + this.controllerConnected = true; + this.controllerType = evt.detail.name; + if (this.data.hand === 'left') { return; } + el.setAttribute('cursor', controllerConfig.cursor || {}); + el.setAttribute('raycaster', 'objects: [raycastable]; far: 20; enabled: true'); + el.setAttribute('line', {opacity: 0.75, color: 'pink', end: {x: 0, y: 0, z: -20}}); }, update: function () { @@ -62,6 +70,43 @@ AFRAME.registerComponent('saber-controls', { tick: function () { if (!this.bladeEl) { return; } this.boundingBox.setFromObject(this.bladeEl.getObject3D('mesh')); + }, + + config: { + 'oculus-touch-controls': { + cursor: { + downEvents: [ + 'triggerdown', + 'gripdown', + 'abuttondown', + 'bbuttondown', + 'xbuttondown', + 'ybuttondown', + ], + upEvents: [ + 'triggerup', + 'gripup', + 'abuttonup', + 'bbuttonup', + 'xbuttonup', + 'ybuttonup', + ], + }, + }, + + 'vive-controls': { + cursor: { + downEvents: ['trackpaddown', 'triggerdown', 'gripdown'], + upEvents: ['trackpadup', 'triggerup', 'gripup'], + }, + }, + + 'windows-motion-controls': { + cursor: { + downEvents: ['trackpaddown', 'triggerdown', 'gripdown'], + upEvents: ['trackpadup', 'triggerup', 'gripup'], + }, + } } }); \ No newline at end of file