diff --git a/src/components/super-networked-interactable.js b/src/components/super-networked-interactable.js index 86a49e71b2cea0639f3ef8de81120356177893fd..4c96f2452f9945c0b9bf29be259c487b8d665c3d 100644 --- a/src/components/super-networked-interactable.js +++ b/src/components/super-networked-interactable.js @@ -1,5 +1,17 @@ import { paths } from "../systems/userinput/paths"; +const pathsMap = { + "player-right-controller": { + scaleGrabbedGrabbable: paths.actions.rightHand.scaleGrabbedGrabbable + }, + "player-left-controller": { + scaleGrabbedGrabbable: paths.actions.leftHand.scaleGrabbedGrabbable + }, + cursor: { + scaleGrabbedGrabbable: paths.actions.cursor.scaleGrabbedGrabbable + } +}; + /** * Manages ownership and haptics on an interatable * @namespace network @@ -30,14 +42,12 @@ AFRAME.registerComponent("super-networked-interactable", { } }); - this._stateAdded = this._stateAdded.bind(this); this._onGrabStart = this._onGrabStart.bind(this); this._onGrabEnd = this._onGrabEnd.bind(this); this._onOwnershipLost = this._onOwnershipLost.bind(this); this.el.addEventListener("grab-start", this._onGrabStart); this.el.addEventListener("grab-end", this._onGrabEnd); this.el.addEventListener("ownership-lost", this._onOwnershipLost); - this.el.addEventListener("stateadded", this._stateAdded); this.system.addComponent(this); }, @@ -46,7 +56,6 @@ AFRAME.registerComponent("super-networked-interactable", { this.el.removeEventListener("grab-start", this._onGrabStart); this.el.removeEventListener("grab-end", this._onGrabEnd); this.el.removeEventListener("ownership-lost", this._onOwnershipLost); - this.el.removeEventListener("stateadded", this._stateAdded); this.system.removeComponent(this); }, @@ -77,7 +86,7 @@ AFRAME.registerComponent("super-networked-interactable", { }, _changeScale: function(delta) { - if (this.el.is("grabbed") && this.el.components.hasOwnProperty("stretchable")) { + if (delta && this.el.is("grabbed") && this.el.components.hasOwnProperty("stretchable")) { this.currentScale.addScalar(delta).clampScalar(this.data.minScale, this.data.maxScale); this.el.setAttribute("scale", this.currentScale); this.el.components["stretchable"].stretchBody(this.el, this.currentScale); @@ -85,38 +94,10 @@ AFRAME.registerComponent("super-networked-interactable", { }, tick: function() { - const userinput = AFRAME.scenes[0].systems.userinput; - const grabbable = this.el.components.grabbable; - let delta = 0; - if (this.el.is("grabbed") && this.el.components.hasOwnProperty("stretchable")) { - const isLeftHand = grabbable.grabbers[0] === document.querySelector("[super-hands], #player-left-controller"); - if (isLeftHand) { - delta = userinput.readFrameValueAtPath(paths.actions.leftHand.scaleGrabbedGrabbable); - } - const isRightHand = grabbable.grabbers[0] === document.querySelector("[super-hands], #player-right-controller"); - if (isRightHand) { - delta = userinput.readFrameValueAtPath(paths.actions.rightHand.scaleGrabbedGrabbable); - } - const isCursor = document.querySelector("[cursor-controller]").components["cursor-controller"].data.cursor; - if (isCursor) { - delta = userinput.readFrameValueAtPath(paths.actions.cursor.scaleGrabbedGrabbable); - } - } - if (delta) { - this._changeScale(delta); - } - }, + const grabber = this.el.components.grabbable.grabbers[0]; + if (!(grabber && pathsMap[grabber.id])) return; - _stateAdded(evt) { - switch (evt.detail) { - case "scaleUp": - this._changeScale(-this.data.scrollScaleDelta); - break; - case "scaleDown": - this._changeScale(this.data.scrollScaleDelta); - break; - default: - break; - } + const userinput = AFRAME.scenes[0].systems.userinput; + this._changeScale(userinput.readFrameValueAtPath(pathsMap[grabber.id].scaleGrabbedGrabbable)); } });