diff --git a/src/assets.html b/src/assets.html index 9371dbe..d12729c 100644 --- a/src/assets.html +++ b/src/assets.html @@ -60,8 +60,6 @@ - - +> + + { - if (!evt.detail || !evt.detail.el.classList.contains('saber') || - evt.detail.el === el) { return; } + el.addEventListener('mouseenter', evt => { + if (!evt.detail || !evt.detail.intersectedEl) { return; } + + const intersectedEl = evt.detail.intersectedEl; + if (!intersectedEl.classList.contains('blade') || intersectedEl === el) { return; } + this.el.components.haptics__saber.pulse(); }); } diff --git a/src/components/haptics-wall.js b/src/components/haptics-wall.js index f1e8495..1cb7fbd 100644 --- a/src/components/haptics-wall.js +++ b/src/components/haptics-wall.js @@ -2,16 +2,14 @@ * Listen to aabb-collider event for wall haptics. */ AFRAME.registerComponent('haptics-wall', { - dependencies: ['aabb-collider'], - init: function () { const el = this.el; this.isHittingWall = false; el.setAttribute('haptics__wall', {dur: 50, force: 0.025}); this.checkIfHittingWall = this.checkIfHittingWall.bind(this); - el.addEventListener('hitstart', this.checkIfHittingWall); - el.addEventListener('hitend', this.checkIfHittingWall); + el.addEventListener('mouseenter', this.checkIfHittingWall); + el.addEventListener('mouseleave', this.checkIfHittingWall); this.tick = AFRAME.utils.throttleTick(this.tick.bind(this), 50); }, @@ -20,7 +18,7 @@ AFRAME.registerComponent('haptics-wall', { * On aabb-collider event, check if we are still hitting a wall. */ checkIfHittingWall: function () { - const intersectedEls = this.el.components['aabb-collider'].intersectedEls; + const intersectedEls = this.el.components.raycaster__game.intersectedEls; this.isHittingWall = false; for (let i = 0; i < intersectedEls.length; i++) { if (intersectedEls[i].components.wall) { diff --git a/src/components/raycastable.js b/src/components/raycastable.js deleted file mode 100644 index 919b7f2..0000000 --- a/src/components/raycastable.js +++ /dev/null @@ -1 +0,0 @@ -AFRAME.registerComponent('raycastable', {}); diff --git a/src/components/wall.js b/src/components/wall.js index 3092dd3..b7f7bc4 100644 --- a/src/components/wall.js +++ b/src/components/wall.js @@ -13,13 +13,13 @@ AFRAME.registerComponent('wall', { pause: function () { this.el.object3D.visible = false; this.el.removeAttribute('data-collidable-head'); - this.el.removeAttribute('data-collidable-saber'); + this.el.removeAttribute('raycastable-game'); }, play: function () { this.el.object3D.visible = true; this.el.setAttribute('data-collidable-head', ''); - this.el.setAttribute('data-collidable-saber', ''); + this.el.setAttribute('raycastable-game', ''); }, tock: function (time, delta) { @@ -35,6 +35,6 @@ AFRAME.registerComponent('wall', { this.el.object3D.position.z = 9999; this.el.pause(); this.el.removeAttribute('data-collidable-head'); - this.el.removeAttribute('data-collidable-saber'); + this.el.removeAttribute('raycastable-game'); } }); diff --git a/src/index.html b/src/index.html index 14dd89f..7456013 100644 --- a/src/index.html +++ b/src/index.html @@ -86,10 +86,6 @@ particleplayer="src: #mineParticlesJSON; pscale: 0.5; scale: 1.4; loop: false; on: explode; img: #sparkImg; count: 20%; animateScale: true; initialScale: 3 1 1; finalScale: 0.2 0.2 1"> - @@ -138,14 +138,10 @@ animation="property: scale; from: 0 0 0; to: 1 1 1; dur: 750; easing: linear; startEvents: drawblade" scale="0.001 0.001 0.001"> {% endmacro %} @@ -195,8 +191,12 @@ material="shader: flat; src: #stepbackImg; transparent: true; opacity: 0"> {% if not IS_PRODUCTION %} - + {% endif %}