From f37b4e68567ba1183bcdb1f45e12df462682d7c8 Mon Sep 17 00:00:00 2001
From: Greg Fodor <gfodor@gmail.com>
Date: Mon, 22 Oct 2018 03:27:53 +0000
Subject: [PATCH] Don't turn body dynamic on unpin

---
 src/components/pin-networked-object-button.js  |  2 +-
 src/components/pinnable.js                     | 15 +++++++++++++++
 src/components/pinned.js                       |  8 --------
 src/components/sticky-object.js                |  2 ++
 src/components/super-networked-interactable.js |  2 ++
 src/hub.html                                   |  1 +
 src/hub.js                                     |  2 +-
 7 files changed, 22 insertions(+), 10 deletions(-)
 create mode 100644 src/components/pinnable.js
 delete mode 100644 src/components/pinned.js

diff --git a/src/components/pin-networked-object-button.js b/src/components/pin-networked-object-button.js
index a522fbb51..51f72ac11 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 000000000..f0f2e11f2
--- /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 225fd7208..000000000
--- 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 61d04814a..dbf57ed56 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 86a49e71b..f2d1b398d 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 74a8d6c6a..c54135cdd 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 fcd1c6bdb..79ddeb10a 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";
-- 
GitLab