From 1f6b92a5190966886712a5356ecef593215eb75b Mon Sep 17 00:00:00 2001
From: rabelaiis <jafranck2@gmail.com>
Date: Mon, 31 Jul 2017 17:27:49 +0700
Subject: [PATCH] Vibrate only the controller that hits the key and decrease
 timeout so that the xylophone can be played faster

---
 .../marketplace/xylophone/xylophoneKey.js     | 22 +++++++++++--------
 .../marketplace/xylophone/xylophoneRezzer.js  |  2 ++
 2 files changed, 15 insertions(+), 9 deletions(-)

diff --git a/unpublishedScripts/marketplace/xylophone/xylophoneKey.js b/unpublishedScripts/marketplace/xylophone/xylophoneKey.js
index 5cff66e557..3d131252c8 100644
--- a/unpublishedScripts/marketplace/xylophone/xylophoneKey.js
+++ b/unpublishedScripts/marketplace/xylophone/xylophoneKey.js
@@ -9,12 +9,12 @@
 //
 
 (function() {
-    var TIMEOUT = 150;
+    var TIMEOUT = 50; // at 30 ms, the key's color sometimes fails to switch when hit
     var TEXTURE_GRAY = Script.resolvePath("xylotex_bar_gray.png");
     var TEXTURE_BLACK = Script.resolvePath("xylotex_bar_black.png");
     var IS_DEBUG = false;
     var _this;
-
+ 
     function XylophoneKey() {
         _this = this;
     }
@@ -34,24 +34,28 @@
 
         collisionWithEntity: function(thisEntity, otherEntity, collision) {
             if (collision.type === 0) {
-                _this.hit();
+                _this.hit(otherEntity);                
             }
         },
 
-        clickDownOnEntity: function() {
-            _this.hit();
+        clickDownOnEntity: function(otherEntity) {
+            _this.hit(otherEntity);
         },
 
-        hit: function() {
+        hit: function(otherEntity) {
             if (!_this.isWaiting) {
                 _this.isWaiting = true;
                 _this.homePosition = Entities.getEntityProperties(_this.entityID, ["position"]).position;
                 _this.injector = Audio.playSound(_this.sound, {position: _this.homePosition, volume: 1});
                 _this.editEntityTextures(_this.entityID, "file5", TEXTURE_GRAY);
+                
                 var HAPTIC_STRENGTH = 1;
-                var HAPTIC_DURATION = 20;
-                var HAPTIC_HAND = 2; // Both hands
-                Controller.triggerHapticPulse(HAPTIC_STRENGTH, HAPTIC_DURATION, HAPTIC_HAND);
+                var HAPTIC_DURATION = 20;                
+                var userData = JSON.parse(Entities.getEntityProperties(otherEntity, 'userData').userData);
+                if (userData.hasOwnProperty('hand')){
+                    Controller.triggerHapticPulse(HAPTIC_STRENGTH, HAPTIC_DURATION, userData.hand);
+                }
+
                 _this.timeout();
             }
         },
diff --git a/unpublishedScripts/marketplace/xylophone/xylophoneRezzer.js b/unpublishedScripts/marketplace/xylophone/xylophoneRezzer.js
index e99341bb19..6adf8710a7 100644
--- a/unpublishedScripts/marketplace/xylophone/xylophoneRezzer.js
+++ b/unpublishedScripts/marketplace/xylophone/xylophoneRezzer.js
@@ -11,6 +11,7 @@
 var SOUND_FILES = ["C4.wav", "D4.wav", "E4.wav", "F4.wav", "G4.wav", "A4.wav", "B4.wav", "C5.wav"];
 var KEY_MODEL_URL = Script.resolvePath("xyloKey_2_a_e.fbx");
 var KEY_SCRIPT_URL = Script.resolvePath("xylophoneKey.js");
+var MALLET_SCRIPT_URL = Script.resolvePath("xylophoneMallet.js");
 var TEXTURE_BLACK = Script.resolvePath("xylotex_bar_black.png");
 var MALLET_MODEL_URL = Script.resolvePath("Mallet3-2pc.fbx");
 var MALLET_MODEL_COLLIDER_URL = Script.resolvePath("Mallet3-2bpc_phys.obj");
@@ -91,6 +92,7 @@ function rezMallets() {
         damping: 1,
         angularDamping: 1,
         shapeType: "compound",
+        script: MALLET_SCRIPT_URL,
         userData: JSON.stringify({
             grabbableKey: {
                 invertSolidWhileHeld: true