From 0cf71bd3e13e70ee8c9dda6ca9557e8115cf1338 Mon Sep 17 00:00:00 2001
From: SilverfishVR <53531160+SilverfishVR@users.noreply.github.com>
Date: Wed, 18 Aug 2021 22:19:10 +0200
Subject: [PATCH] make HUD bubble/shield button optional

Adds an menu item in "Settings" to toggle the HUD shield/bubble button on or off.
Shield button remains available in the tablet or toolbar, it is called "HUD shield button" but suggestions are welcome

fixes https://github.com/vircadia/vircadia/issues/1210
---
 scripts/system/bubble.js | 24 ++++++++++++++++++++++++
 1 file changed, 24 insertions(+)

diff --git a/scripts/system/bubble.js b/scripts/system/bubble.js
index eca3b3dcd4..0c019f4e4b 100644
--- a/scripts/system/bubble.js
+++ b/scripts/system/bubble.js
@@ -46,6 +46,27 @@
         });
     }
 
+    //create a menu item in "Setings" to toggle the bubble/shield HUD button 
+    var menuItemName = "HUD shield button";
+    Menu.addMenuItem({
+        menuName: "Settings",
+        menuItemName: menuItemName,
+        isCheckable: true,
+        isChecked: AvatarInputs.showBubbleTools
+    });
+    Menu.menuItemEvent.connect(onToggleHudShieldButton);
+    AvatarInputs.showBubbleToolsChanged.connect(showBubbleToolsChanged);
+
+    function onToggleHudShieldButton(menuItem) {
+        if (menuItem == menuItemName) {
+            AvatarInputs.setShowBubbleTools(Menu.isOptionChecked(menuItem))
+        };
+    }
+
+    function showBubbleToolsChanged(show) {
+        Menu.setIsOptionChecked(menuItemName, show);
+    }
+
     // Make the bubble overlay visible, set its position, and play the sound
     function createOverlays() {
         var nowTimestamp = Date.now();
@@ -191,6 +212,9 @@
 
     // Cleanup the tablet button and overlays when script is stopped
     Script.scriptEnding.connect(function () {
+        Menu.menuItemEvent.disconnect(onToggleHudShieldButton);
+        AvatarInputs.showBubbleToolsChanged.disconnect(showBubbleToolsChanged);
+        Menu.removeMenuItem("Settings", menuItemName);
         button.clicked.disconnect(Users.toggleIgnoreRadius);
         if (tablet) {
             tablet.removeButton(button);