adding ignore for far-/near- grabbable entities when operating on web surface

This commit is contained in:
Wayne Chen 2018-07-20 11:18:20 -07:00
parent 5276d84aa5
commit 4e3a6cb320

View file

@ -20,8 +20,6 @@ Script.include("/~/system/libraries/controllers.js");
function WebSurfaceLaserInput(hand) { function WebSurfaceLaserInput(hand) {
this.hand = hand; this.hand = hand;
this.otherHand = this.hand === RIGHT_HAND ? LEFT_HAND : RIGHT_HAND; this.otherHand = this.hand === RIGHT_HAND ? LEFT_HAND : RIGHT_HAND;
this.ignoredEntities = [];
this.lastObjectID = null;
this.running = false; this.running = false;
this.parameters = makeDispatcherModuleParameters( this.parameters = makeDispatcherModuleParameters(
@ -71,11 +69,15 @@ Script.include("/~/system/libraries/controllers.js");
// is pointing at an entity. // is pointing at an entity.
var entityProperties = Entities.getEntityProperties(intersection.objectID); var entityProperties = Entities.getEntityProperties(intersection.objectID);
var entityType = entityProperties.type; var entityType = entityProperties.type;
if (entityIsGrabbable(entityProperties)) { if (entityIsGrabbable(entityProperties) && entityType !== "Web") {
// check if entity is near grabbable. // check if entity is near grabbable.
var distance = Vec3.distance(entityProperties.position, controllerData.controllerLocations[this.hand].position); var distance = Vec3.distance(entityProperties.position, controllerData.controllerLocations[this.hand].position);
if (distance <= NEAR_GRAB_RADIUS * MyAvatar.sensorToWorldScale) if (distance <= NEAR_GRAB_RADIUS * MyAvatar.sensorToWorldScale) {
return (triggerPressed && entityType !== "Web"); return triggerPressed;
} else {
// far-grabbable, but still return it as true anyway
return false;
}
} }
} }
return false; return false;
@ -90,25 +92,15 @@ Script.include("/~/system/libraries/controllers.js");
if ((HMD.tabletID && objectID === HMD.tabletID) || if ((HMD.tabletID && objectID === HMD.tabletID) ||
(HMD.tabletScreenID && objectID === HMD.tabletScreenID) || (HMD.tabletScreenID && objectID === HMD.tabletScreenID) ||
(HMD.homeButtonID && objectID === HMD.homeButtonID)) { (HMD.homeButtonID && objectID === HMD.homeButtonID)) {
this.lastObjectID = objectID;
return true; return true;
} else { } else {
var overlayType = Overlays.getOverlayType(objectID); var overlayType = Overlays.getOverlayType(objectID);
this.lastObjectID = objectID;
return overlayType === "web3d" || triggerPressed; return overlayType === "web3d" || triggerPressed;
} }
} else if (intersection.type === Picks.INTERSECTED_ENTITY) { } else if (intersection.type === Picks.INTERSECTED_ENTITY) {
var entityProperty = Entities.getEntityProperties(objectID); var entityProperty = Entities.getEntityProperties(objectID);
if (entityProperty.type === "Web") { var isLocked = entityProperty.locked;
var isLocked = entityProperty.locked; return (!isLocked || triggerPressed || entityProperty.type === "Web");
this.lastObjectID = objectID;
return (!isLocked || triggerPressed);
} else if (this.ignoredEntities.indexOf(objectID) === -1 && triggerPressed && this.lastObjectID !== objectID) {
// ignore, preserve whether it's running or not.
console.log("I'm here");
Pointers.setIgnoreItems(controllerData.pointers[this.hand], [objectID]);
this.ignoredEntities.push(objectID);
}
} }
return false; return false;
}; };
@ -126,11 +118,6 @@ Script.include("/~/system/libraries/controllers.js");
} }
}; };
this.reAddIgnoredEntities = function(controllerData) {
Pointers.setIncludeItems(controllerData.pointers[this.hand], this.ignoredEntities);
this.ignoredEntities = [];
}
this.updateAllwaysOn = function() { this.updateAllwaysOn = function() {
var PREFER_STYLUS_OVER_LASER = "preferStylusOverLaser"; var PREFER_STYLUS_OVER_LASER = "preferStylusOverLaser";
this.parameters.handLaser.allwaysOn = !Settings.getValue(PREFER_STYLUS_OVER_LASER, false); this.parameters.handLaser.allwaysOn = !Settings.getValue(PREFER_STYLUS_OVER_LASER, false);
@ -148,8 +135,7 @@ Script.include("/~/system/libraries/controllers.js");
var isTriggerPressed = controllerData.triggerValues[this.hand] > TRIGGER_OFF_VALUE && var isTriggerPressed = controllerData.triggerValues[this.hand] > TRIGGER_OFF_VALUE &&
controllerData.triggerValues[this.otherHand] <= TRIGGER_OFF_VALUE; controllerData.triggerValues[this.otherHand] <= TRIGGER_OFF_VALUE;
var allowThisModule = !otherModuleRunning || isTriggerPressed; var allowThisModule = !otherModuleRunning || isTriggerPressed;
if (allowThisModule && this.isPointingAtTriggerable(controllerData, isTriggerPressed) && if (allowThisModule && this.isPointingAtTriggerable(controllerData, isTriggerPressed)) {
!this.isPointingAtNearGrabbableEntity(controllerData, isTriggerPressed)) {
this.updateAllwaysOn(); this.updateAllwaysOn();
if (isTriggerPressed) { if (isTriggerPressed) {
this.dominantHandOverride = true; // Override dominant hand. this.dominantHandOverride = true; // Override dominant hand.
@ -176,7 +162,6 @@ Script.include("/~/system/libraries/controllers.js");
return makeRunningValues(true, [], []); return makeRunningValues(true, [], []);
} }
this.deleteContextOverlay(); this.deleteContextOverlay();
this.reAddIgnoredEntities(controllerData);
this.running = false; this.running = false;
this.dominantHandOverride = false; this.dominantHandOverride = false;
return makeRunningValues(false, [], []); return makeRunningValues(false, [], []);