diff --git a/src/components/pin-networked-object-button.js b/src/components/pin-networked-object-button.js index a522fbb51931449b39b604adf66e263e699c36bd..51f72ac1120cfa26af62d997225996a94bb0c33f 100644 --- a/src/components/pin-networked-object-button.js +++ b/src/components/pin-networked-object-button.js @@ -3,7 +3,7 @@ AFRAME.registerComponent("pin-networked-object-button", { this.scene = document.querySelector("a-scene"); this.onClick = () => { - this.targetEl.setAttribute("pinned", ""); + this.targetEl.setAttribute("pinnable", { pinned: true }); this.scene.emit("object_pinned", { el: this.targetEl }); }; diff --git a/src/components/pinnable.js b/src/components/pinnable.js new file mode 100644 index 0000000000000000000000000000000000000000..f0f2e11f2c790c81804aa0385a3cfe8f72ecd057 --- /dev/null +++ b/src/components/pinnable.js @@ -0,0 +1,15 @@ +AFRAME.registerComponent("pinnable", { + schema: { + pinned: { default: false } + }, + + init() {}, + + update() { + this.el.setAttribute("grabbable", { maxGrabbers: this.data.pinned ? 0 : 1 }); + + if (this.data.pinned) { + this.el.setAttribute("body", { type: "static" }); + } + } +}); diff --git a/src/components/pinned.js b/src/components/pinned.js deleted file mode 100644 index 225fd7208152199c0afc5cf285be3e4265c200f0..0000000000000000000000000000000000000000 --- a/src/components/pinned.js +++ /dev/null @@ -1,8 +0,0 @@ -AFRAME.registerComponent("pinned", { - init() {}, - - update() { - console.log("Disabling"); - console.log(this.el); - } -}); diff --git a/src/components/sticky-object.js b/src/components/sticky-object.js index 61d04814a95b2e30cc79743a039dec1c0a6d5235..dbf57ed56353304d8409c42f776d76a53bcbe294 100644 --- a/src/components/sticky-object.js +++ b/src/components/sticky-object.js @@ -60,6 +60,8 @@ AFRAME.registerComponent("sticky-object", { }, _onGrab() { + if (!this.el.grabbable || this.el.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 86a49e71b2cea0639f3ef8de81120356177893fd..f2d1b398d387f60704488a69f58f1fb2bb9ced5d 100644 --- a/src/components/super-networked-interactable.js +++ b/src/components/super-networked-interactable.js @@ -51,6 +51,8 @@ AFRAME.registerComponent("super-networked-interactable", { }, _onGrabStart: function(e) { + if (!this.el.grabbable || this.el.grabbable.data.maxGrabbers === 0) return; + this.hand = e.detail.hand; this.hand.emit("haptic_pulse", { intensity: "high" }); if (this.networkedEl && !NAF.utils.isMine(this.networkedEl)) { diff --git a/src/hub.html b/src/hub.html index 74a8d6c6abe272070c2ebb258021fd0649caa1c9..c54135cdd930d0529e0e49f3c56f822a94a1e13d 100644 --- a/src/hub.html +++ b/src/hub.html @@ -150,6 +150,7 @@ position-at-box-shape-border="target:.action-buttons" destroy-at-extreme-distances set-yxz-order + 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> diff --git a/src/hub.js b/src/hub.js index fcd1c6bdb19e9860b3d109931e5d1984c6f43823..79ddeb10a657b4c0302b5f07caaf8e229de13ba6 100644 --- a/src/hub.js +++ b/src/hub.js @@ -55,7 +55,7 @@ import "./components/pinch-to-move"; import "./components/pitch-yaw-rotator"; import "./components/auto-scale-cannon-physics-body"; import "./components/position-at-box-shape-border"; -import "./components/pinned"; +import "./components/pinnable"; import "./components/pin-networked-object-button"; import "./components/remove-networked-object-button"; import "./components/destroy-at-extreme-distances";