From 47321c5b1b1411d75a981b54f9303194c5deee8b Mon Sep 17 00:00:00 2001 From: Greg Fodor <gfodor@gmail.com> Date: Mon, 22 Oct 2018 04:45:50 +0000 Subject: [PATCH] Pinning and unpinning working but not over network --- src/components/pin-networked-object-button.js | 28 ++++++++++++++++--- src/components/pinnable.js | 19 +++++++++++-- src/components/sticky-object.js | 2 +- .../super-networked-interactable.js | 2 +- src/hub.html | 4 +-- 5 files changed, 45 insertions(+), 10 deletions(-) diff --git a/src/components/pin-networked-object-button.js b/src/components/pin-networked-object-button.js index 51f72ac11..59883f8a7 100644 --- a/src/components/pin-networked-object-button.js +++ b/src/components/pin-networked-object-button.js @@ -1,13 +1,33 @@ AFRAME.registerComponent("pin-networked-object-button", { + schema: { + labelSelector: { type: "string" } + }, + init() { this.scene = document.querySelector("a-scene"); + this.labelEl = this.el.parentNode.querySelector(this.data.labelSelector); + + NAF.utils.getNetworkedEntity(this.el).then(networkedEl => (this.targetEl = networkedEl)); this.onClick = () => { - this.targetEl.setAttribute("pinnable", { pinned: true }); - this.scene.emit("object_pinned", { el: this.targetEl }); - }; + let pinned = false; - NAF.utils.getNetworkedEntity(this.el).then(networkedEl => (this.targetEl = networkedEl)); + if (this.targetEl.components.pinnable) { + pinned = this.targetEl.components.pinnable.data.pinned; + } + + if (!pinned) { + this.el.parentNode.setAttribute("clickable", ""); + this.targetEl.setAttribute("pinnable", { pinned: true }); + this.labelEl.setAttribute("text", { value: "pinned" }); + this.scene.emit("object_pinned", { el: this.targetEl }); + } else { + this.el.parentNode.removeAttribute("clickable"); + this.targetEl.setAttribute("pinnable", { pinned: false }); + this.labelEl.setAttribute("text", { value: "unpinned" }); + this.scene.emit("object_unpinned", { el: this.targetEl }); + } + }; }, play() { diff --git a/src/components/pinnable.js b/src/components/pinnable.js index f0f2e11f2..14c773403 100644 --- a/src/components/pinnable.js +++ b/src/components/pinnable.js @@ -6,10 +6,25 @@ AFRAME.registerComponent("pinnable", { init() {}, update() { - this.el.setAttribute("grabbable", { maxGrabbers: this.data.pinned ? 0 : 1 }); - if (this.data.pinned) { + if (this.el.components.grabbable) { + this.prevMaxGrabbers = this.el.components.grabbable.data.maxGrabbers; + } + + if (this.el.components.body) { + this.prevBodyType = this.el.components.body.data.type; + } + this.el.setAttribute("body", { type: "static" }); + this.el.setAttribute("grabbable", { maxGrabbers: 0 }); + } else { + if (typeof this.prevMaxGrabbers !== "undefined") { + this.el.setAttribute("grabbable", { maxGrabbers: this.prevMaxGrabbers }); + } + + if (typeof this.prevBodyType !== "undefined") { + this.el.setAttribute("body", { type: this.prevBodyType }); + } } } }); diff --git a/src/components/sticky-object.js b/src/components/sticky-object.js index dbf57ed56..64d229b61 100644 --- a/src/components/sticky-object.js +++ b/src/components/sticky-object.js @@ -60,7 +60,7 @@ AFRAME.registerComponent("sticky-object", { }, _onGrab() { - if (!this.el.grabbable || this.el.grabbable.data.maxGrabbers === 0) return; + if (!this.el.components.grabbable || this.el.components.grabbable.data.maxGrabbers === 0) return; this.setLocked(false); this.el.body.collisionResponse = false; diff --git a/src/components/super-networked-interactable.js b/src/components/super-networked-interactable.js index f2d1b398d..5e2e37577 100644 --- a/src/components/super-networked-interactable.js +++ b/src/components/super-networked-interactable.js @@ -51,7 +51,7 @@ AFRAME.registerComponent("super-networked-interactable", { }, _onGrabStart: function(e) { - if (!this.el.grabbable || this.el.grabbable.data.maxGrabbers === 0) return; + if (!this.el.components.grabbable || this.el.components.grabbable.data.maxGrabbers === 0) return; this.hand = e.detail.hand; this.hand.emit("haptic_pulse", { intensity: "high" }); diff --git a/src/hub.html b/src/hub.html index c54135cdd..d2d57473c 100644 --- a/src/hub.html +++ b/src/hub.html @@ -153,8 +153,8 @@ pinnable > <a-entity class="action-buttons" visible-while-frozen> - <a-entity mixin="rounded-text-button" pin-networked-object-button position="0 0.125 0.01"> </a-entity> - <a-entity text=" value:pin; width:1.75; align:center;" text-raycast-hack position="0 0.125 0.02"></a-entity> + <a-entity mixin="rounded-text-button" pin-networked-object-button="labelSelector:.pin-button-label" position="0 0.125 0.01"> </a-entity> + <a-entity class="pin-button-label" text=" value:unpinned; width:1.75; align:center;" text-raycast-hack position="0 0.125 0.02"></a-entity> <a-entity mixin="rounded-text-button" remove-networked-object-button position="0 -0.125 0.01"> </a-entity> <a-entity text=" value:remove; width:1.75; align:center;" text-raycast-hack position="0 -0.125 0.02"></a-entity> </a-entity> -- GitLab