diff --git a/examples/controllers/handControllerGrab.js b/examples/controllers/handControllerGrab.js index e040befdf8..05dfc8e5d5 100644 --- a/examples/controllers/handControllerGrab.js +++ b/examples/controllers/handControllerGrab.js @@ -86,6 +86,11 @@ var STATE_RELEASE = 10; var GRABBABLE_DATA_KEY = "grabbableKey"; // shared with grab.js var GRAB_USER_DATA_KEY = "grabKey"; // shared with grab.js +var DEFAULT_GRABBABLE_DATA = { + grabbable: true, + invertSolidWhileHeld: false +}; + function getTag() { return "grab-" + MyAvatar.sessionUUID; } @@ -257,10 +262,6 @@ function MyController(hand, triggerAction) { this.lineOn(pickRay.origin, Vec3.multiply(pickRay.direction, LINE_LENGTH), NO_INTERSECT_COLOR); - var defaultGrabbableData = { - grabbable: true - }; - // don't pick 60x per second. do this check after updating the line so it's not jumpy. var now = Date.now(); if (now - this.lastPickTime < MSECS_PER_SEC / PICKS_PER_SECOND_PER_HAND) { @@ -275,7 +276,7 @@ function MyController(hand, triggerAction) { var intersectionDistance = Vec3.distance(handControllerPosition, intersection.intersection); this.grabbedEntity = intersection.entityID; - var grabbableData = getEntityCustomData(GRABBABLE_DATA_KEY, intersection.entityID, defaultGrabbableData); + var grabbableData = getEntityCustomData(GRABBABLE_DATA_KEY, intersection.entityID, DEFAULT_GRABBABLE_DATA); if (grabbableData.grabbable === false) { this.grabbedEntity = null; return; @@ -308,7 +309,7 @@ function MyController(hand, triggerAction) { for (i = 0; i < nearbyEntities.length; i++) { - var grabbableData = getEntityCustomData(GRABBABLE_DATA_KEY, nearbyEntities[i], defaultGrabbableData); + var grabbableData = getEntityCustomData(GRABBABLE_DATA_KEY, nearbyEntities[i], DEFAULT_GRABBABLE_DATA); if (grabbableData.grabbable === false) { return; } @@ -700,24 +701,24 @@ function MyController(hand, triggerAction) { }; this.activateEntity = function(entityID, grabbedProperties) { + var grabbableData = getEntityCustomData(GRABBABLE_DATA_KEY, entityID, DEFAULT_GRABBABLE_DATA); + var invertSolidWhileHeld = grabbableData["invertSolidWhileHeld"]; var data = getEntityCustomData(GRAB_USER_DATA_KEY, entityID, {}); data["activated"] = true; data["avatarId"] = MyAvatar.sessionUUID; data["refCount"] = data["refCount"] ? data["refCount"] + 1 : 1; - // zero gravity and set ignoreForCollisions to true, but in a way that lets us put them back, after all grabs are done + // zero gravity and set ignoreForCollisions in a way that lets us put them back, after all grabs are done if (data["refCount"] == 1) { data["gravity"] = grabbedProperties.gravity; data["ignoreForCollisions"] = grabbedProperties.ignoreForCollisions; - Entities.editEntity(entityID, { - gravity: { - x: 0, - y: 0, - z: 0 - }, - ignoreForCollisions: true - }); + var whileHeldProperties = {gravity: {x:0, y:0, z:0}}; + if (invertSolidWhileHeld) { + whileHeldProperties["ignoreForCollisions"] = ! grabbedProperties.ignoreForCollisions; + } + Entities.editEntity(entityID, whileHeldProperties); } setEntityCustomData(GRAB_USER_DATA_KEY, entityID, data); + return data; }; this.deactivateEntity = function(entityID) { @@ -752,4 +753,4 @@ function cleanup() { } Script.scriptEnding.connect(cleanup); -Script.update.connect(update); \ No newline at end of file +Script.update.connect(update); diff --git a/examples/grab.js b/examples/grab.js index 1c49775a49..1a02911db9 100644 --- a/examples/grab.js +++ b/examples/grab.js @@ -29,8 +29,9 @@ var IDENTITY_QUAT = { var GRABBABLE_DATA_KEY = "grabbableKey"; // shared with handControllerGrab.js var GRAB_USER_DATA_KEY = "grabKey"; // shared with handControllerGrab.js -var defaultGrabbableData = { - grabbable: true +var DEFAULT_GRABBABLE_DATA = { + grabbable: true, + invertSolidWhileHeld: false }; @@ -324,8 +325,7 @@ Grabber.prototype.pressEvent = function(event) { return; } - - var grabbableData = getEntityCustomData(GRABBABLE_DATA_KEY, pickResults.entityID, defaultGrabbableData); + var grabbableData = getEntityCustomData(GRABBABLE_DATA_KEY, pickResults.entityID, DEFAULT_GRABBABLE_DATA); if (grabbableData.grabbable === false) { return; } @@ -496,6 +496,8 @@ Grabber.prototype.keyPressEvent = function(event) { } Grabber.prototype.activateEntity = function(entityID, grabbedProperties) { + var grabbableData = getEntityCustomData(GRABBABLE_DATA_KEY, entityID, DEFAULT_GRABBABLE_DATA); + var invertSolidWhileHeld = grabbableData["invertSolidWhileHeld"]; var data = getEntityCustomData(GRAB_USER_DATA_KEY, entityID, {}); data["activated"] = true; data["avatarId"] = MyAvatar.sessionUUID; @@ -504,7 +506,11 @@ Grabber.prototype.activateEntity = function(entityID, grabbedProperties) { if (data["refCount"] == 1) { data["gravity"] = grabbedProperties.gravity; data["ignoreForCollisions"] = grabbedProperties.ignoreForCollisions; - Entities.editEntity(entityID, {gravity: {x:0, y:0, z:0}, ignoreForCollisions: true}); + var whileHeldProperties = {gravity: {x:0, y:0, z:0}}; + if (invertSolidWhileHeld) { + whileHeldProperties["ignoreForCollisions"] = ! grabbedProperties.ignoreForCollisions; + } + Entities.editEntity(entityID, whileHeldProperties); } setEntityCustomData(GRAB_USER_DATA_KEY, entityID, data); }; diff --git a/libraries/input-plugins/src/input-plugins/SixenseManager.cpp b/libraries/input-plugins/src/input-plugins/SixenseManager.cpp index f542e63668..3950fdea43 100644 --- a/libraries/input-plugins/src/input-plugins/SixenseManager.cpp +++ b/libraries/input-plugins/src/input-plugins/SixenseManager.cpp @@ -166,6 +166,9 @@ void SixenseManager::update(float deltaTime, bool jointsCaptured) { auto userInputMapper = DependencyManager::get(); if (sixenseGetNumActiveControllers() == 0) { + if (_hydrasConnected) { + qCDebug(inputplugins, "hydra disconnected"); + } _hydrasConnected = false; if (_deviceID != 0) { userInputMapper->removeDevice(_deviceID);