Handle tablet entities and overlays not being available

This commit is contained in:
David Rowe 2018-02-08 09:51:48 +13:00
parent 96c97547f9
commit adb6f66a05
17 changed files with 78 additions and 40 deletions

View file

@ -42,8 +42,9 @@ function onClicked() {
// for toolbar-mode: go back to home screen, this will close the window.
tablet.gotoHomeScreen();
} else {
var entity = HMD.tabletID;
Entities.editEntity(entity, { textures: JSON.stringify({ "tex.close": HOME_BUTTON_TEXTURE }) });
if (HMD.tabletID) {
Entities.editEntity(HMD.tabletID, { textures: JSON.stringify({ "tex.close": HOME_BUTTON_TEXTURE }) });
}
tablet.loadQMLSource(AUDIO_QML_SOURCE);
}
}

View file

@ -146,7 +146,7 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js");
};
this.setIgnorePointerItems = function() {
if (HMD.tabletID !== this.tabletID) {
if (HMD.tabletID && HMD.tabletID !== this.tabletID) {
this.tabletID = HMD.tabletID;
Pointers.setIgnoreItems(_this.leftPointer, _this.blacklist);
Pointers.setIgnoreItems(_this.rightPointer, _this.blacklist);

View file

@ -32,7 +32,7 @@ Script.include("/~/system/libraries/utils.js");
this.nearTablet = function(overlays) {
for (var i = 0; i < overlays.length; i++) {
if (overlays[i] === HMD.tabletID) {
if (HMD.tabletID && overlays[i] === HMD.tabletID) {
return true;
}
}
@ -44,7 +44,8 @@ Script.include("/~/system/libraries/utils.js");
};
this.pointingAtTablet = function(objectID) {
return objectID === HMD.tabletScreenID || objectID === HMD.homeButtonID;
return (HMD.tabletScreenID && objectID === HMD.tabletScreenID)
|| (HMD.homeButtonID && objectID === HMD.homeButtonID);
};
this.sendPickData = function(controllerData) {
@ -106,7 +107,7 @@ Script.include("/~/system/libraries/utils.js");
if (nearOverlay) {
var nearOverlayReady = nearOverlay.isReady(controllerData);
if (nearOverlayReady.active && nearOverlay.grabbedThingID === HMD.tabletID) {
if (nearOverlayReady.active && HMD.tabletID && nearOverlay.grabbedThingID === HMD.tabletID) {
return this.exitModule();
}
}

View file

@ -31,7 +31,8 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js");
);
this.pointingAtTablet = function (objectID) {
return objectID === HMD.tabletScreenID || objectID === HMD.homeButtonID;
return (HMD.tabletScreenID && objectID === HMD.tabletScreenID)
|| (HMD.homeButtonID && objectID === HMD.homeButtonID);
};
this.isReady = function (controllerData) {
@ -76,7 +77,7 @@ Script.include("/~/system/libraries/controllerDispatcherUtils.js");
: "LeftNearParentingGrabOverlay");
if (nearOverlay) {
var nearOverlayReady = nearOverlay.isReady(controllerData);
if (nearOverlayReady.active && nearOverlay.grabbedThingID === HMD.tabletID) {
if (nearOverlayReady.active && HMD.tabletID && nearOverlay.grabbedThingID === HMD.tabletID) {
return makeRunningValues(false, [], []);
}
}

View file

@ -117,7 +117,7 @@ Script.include("/~/system/libraries/utils.js");
Overlays.editOverlay(this.grabbedThingID, reparentProps);
// resizeTablet to counter adjust offsets to account for change of scale from sensorToWorldMatrix
if (this.grabbedThingID === HMD.tabletID) {
if (HMD.tabletID && this.grabbedThingID === HMD.tabletID) {
resizeTablet(getTabletWidthFromSettings(), reparentProps.parentJointIndex);
}
@ -143,7 +143,7 @@ Script.include("/~/system/libraries/utils.js");
});
// resizeTablet to counter adjust offsets to account for change of scale from sensorToWorldMatrix
if (this.grabbedThingID === HMD.tabletID) {
if (HMD.tabletID && this.grabbedThingID === HMD.tabletID) {
resizeTablet(getTabletWidthFromSettings(), this.previousParentJointIndex[this.grabbedThingID]);
}
}

View file

@ -20,7 +20,7 @@ Script.include("/~/system/libraries/controllers.js");
var stylusTargetIDs = [];
for (var index = 0; index < stylusTargets.length; index++) {
var stylusTarget = stylusTargets[index];
if (stylusTarget.distance <= maxNormalDistance && stylusTarget.id !== HMD.tabletID) {
if (stylusTarget.distance <= maxNormalDistance && !(HMD.tabletID && stylusTarget.id === HMD.tabletID)) {
stylusTargetIDs.push(stylusTarget.id);
}
}
@ -96,7 +96,7 @@ Script.include("/~/system/libraries/controllers.js");
var i, stylusTarget;
for (i = 0; i < candidateOverlays.length; i++) {
if (candidateOverlays[i] !== HMD.tabletID &&
if (!(HMD.tabletID && candidateOverlays[i] === HMD.tabletID) &&
Overlays.getProperty(candidateOverlays[i], "visible")) {
stylusTarget = getOverlayDistance(controllerPosition, candidateOverlays[i]);
if (stylusTarget) {

View file

@ -263,7 +263,10 @@ function Grabber() {
filter: Picks.PICK_OVERLAYS,
enabled: true
});
RayPick.setIncludeItems(this.mouseRayOverlays, [HMD.tabletID, HMD.tabletScreenID, HMD.homeButtonID]);
var tabletItems = getMainTabletIDs();
if (tabletItems.length > 0) {
RayPick.setIncludeItems(this.mouseRayOverlays, tabletItems);
}
var renderStates = [{name: "grabbed", end: beacon}];
this.mouseRayEntities = Pointers.createPointer(PickType.Ray, {
joint: "Mouse",

View file

@ -31,6 +31,7 @@ Script.include([
"libraries/entityCameraTool.js",
"libraries/gridTool.js",
"libraries/entityList.js",
"libraries/utils.js",
"particle_explorer/particleExplorerTool.js",
"libraries/entityIconOverlayManager.js"
]);
@ -733,8 +734,7 @@ function findClickedEntity(event) {
}
var pickRay = Camera.computePickRay(event.x, event.y);
var overlayResult = Overlays.findRayIntersection(pickRay, true, [HMD.tabletID, HMD.tabletScreenID, HMD.homeButtonID]);
var overlayResult = Overlays.findRayIntersection(pickRay, true, getMainTabletIDs());
if (overlayResult.intersects) {
return null;
}
@ -922,7 +922,7 @@ function mouseReleaseEvent(event) {
function wasTabletClicked(event) {
var rayPick = Camera.computePickRay(event.x, event.y);
var result = Overlays.findRayIntersection(rayPick, true, [HMD.tabletID, HMD.tabletScreenID, HMD.homeButtonID]);
var result = Overlays.findRayIntersection(rayPick, true, getMainTabletIDs());
return result.intersects;
}
@ -945,7 +945,7 @@ function mouseClickEvent(event) {
toolBar.setActive(true);
var pickRay = result.pickRay;
var foundEntity = result.entityID;
if (foundEntity === HMD.tabletID) {
if (HMD.tabletID && foundEntity === HMD.tabletID) {
return;
}
properties = Entities.getEntityProperties(foundEntity);

View file

@ -30,9 +30,8 @@
if (onHelpScreen) {
tablet.gotoHomeScreen();
} else {
var tabletEntity = HMD.tabletID;
if (tabletEntity) {
Entities.editEntity(tabletEntity, {textures: JSON.stringify({"tex.close" : HOME_BUTTON_TEXTURE})});
if (HMD.tabletID) {
Entities.editEntity(HMD.tabletID, {textures: JSON.stringify({"tex.close" : HOME_BUTTON_TEXTURE})});
}
Menu.triggerOption('Help...');
onHelpScreen = true;

View file

@ -334,7 +334,7 @@ WebTablet.prototype.destroy = function () {
};
WebTablet.prototype.geometryChanged = function (geometry) {
if (!HMD.active) {
if (!HMD.active && HMD.tabletID) {
var tabletProperties = {};
// compute position, rotation & parentJointIndex of the tablet
this.calculateTabletAttachmentProperties(NO_HANDS, false, tabletProperties);
@ -462,6 +462,9 @@ WebTablet.prototype.calculateTabletAttachmentProperties = function (hand, useMou
};
WebTablet.prototype.onHmdChanged = function () {
if (!HMD.tabletID) {
return;
}
var tabletProperties = {};
// compute position, rotation & parentJointIndex of the tablet
this.calculateTabletAttachmentProperties(NO_HANDS, false, tabletProperties);

View file

@ -19,7 +19,10 @@ HIFI_PUBLIC_BUCKET = "http://s3.amazonaws.com/hifi-public/";
SPACE_LOCAL = "local";
SPACE_WORLD = "world";
Script.include("./controllers.js");
Script.include([
"./controllers.js",
"./utils.js"
]);
function objectTranslationPlanePoint(position, dimensions) {
var newPosition = { x: position.x, y: position.y, z: position.z };
@ -3650,7 +3653,8 @@ SelectionDisplay = (function() {
var pickRay = generalComputePickRay(event.x, event.y);
// TODO_Case6491: Move this out to setup just to make it once
var interactiveOverlays = [HMD.tabletID, HMD.tabletScreenID, HMD.homeButtonID, selectionBox];
var interactiveOverlays = getMainTabletIDs();
interactiveOverlays.push(selectionBox);
for (var key in grabberTools) {
if (grabberTools.hasOwnProperty(key)) {
interactiveOverlays.push(key);
@ -3663,7 +3667,8 @@ SelectionDisplay = (function() {
var results = testRayIntersect(pickRay, interactiveOverlays);
if (results.intersects) {
var hitOverlayID = results.overlayID;
if ((hitOverlayID === HMD.tabletID) || (hitOverlayID === HMD.tabletScreenID) || (hitOverlayID === HMD.homeButtonID)) {
if ((HMD.tabletID && hitOverlayID === HMD.tabletID) || (HMD.tabletScreenID && hitOverlayID === HMD.tabletScreenID)
|| (HMD.homeButtonID && hitOverlayID === HMD.homeButtonID)) {
// EARLY EXIT-(mouse clicks on the tablet should override the edit affordances)
return false;
}

View file

@ -428,3 +428,17 @@ resizeTablet = function (width, newParentJointIndex, sensorToWorldScaleOverride)
dimensions: { x: homeButtonDim, y: homeButtonDim, z: homeButtonDim }
});
};
getMainTabletIDs = function () {
var tabletIDs = [];
if (HMD.tabletID) {
tabletIDs.push(HMD.tabletID);
}
if (HMD.tabletScreenID) {
tabletIDs.push(HMD.tabletScreenID);
}
if (HMD.homeButtonID) {
tabletIDs.push(HMD.homeButtonID);
}
return tabletIDs;
};

View file

@ -104,8 +104,9 @@ var selectionDisplay = null; // for gridTool.js to ignore
tablet.gotoHomeScreen();
} else {
Wallet.refreshWalletStatus();
var entity = HMD.tabletID;
Entities.editEntity(entity, { textures: JSON.stringify({ "tex.close": HOME_BUTTON_TEXTURE }) });
if (HMD.tabletID) {
Entities.editEntity(HMD.tabletID, { textures: JSON.stringify({ "tex.close": HOME_BUTTON_TEXTURE }) });
}
showMarketplace();
}
}

View file

@ -28,8 +28,9 @@ var HOME_BUTTON_TEXTURE = "http://hifi-content.s3.amazonaws.com/alan/dev/tablet-
// for toolbar-mode: go back to home screen, this will close the window.
tablet.gotoHomeScreen();
} else {
var entity = HMD.tabletID;
Entities.editEntity(entity, {textures: JSON.stringify({"tex.close": HOME_BUTTON_TEXTURE})});
if (HMD.tabletID) {
Entities.editEntity(HMD.tabletID, { textures: JSON.stringify({ "tex.close": HOME_BUTTON_TEXTURE }) });
}
tablet.gotoMenuScreen();
}
}

View file

@ -41,14 +41,14 @@
if (!UIWebTablet) {
return false;
}
if (Overlays.getProperty(HMD.tabletID, "type") != "model") {
if (Overlays.getProperty(HMD.tabletID, "type") !== "model") {
if (debugTablet) {
print("TABLET is invalid due to frame: " + JSON.stringify(Overlays.getProperty(HMD.tabletID, "type")));
}
return false;
}
if (Overlays.getProperty(HMD.homeButtonID, "type") != "circle3d" ||
Overlays.getProperty(HMD.tabletScreenID, "type") != "web3d") {
if (Overlays.getProperty(HMD.homeButtonID, "type") !== "circle3d" ||
Overlays.getProperty(HMD.tabletScreenID, "type") !== "web3d") {
if (debugTablet) {
print("TABLET is invalid due to other");
}
@ -112,7 +112,7 @@
}
function showTabletUI() {
checkTablet()
checkTablet();
if (!tabletRezzed || !tabletIsValid()) {
closeTabletUI();
@ -157,7 +157,7 @@
}
function closeTabletUI() {
checkTablet()
checkTablet();
gTablet.tabletShown = false;
if (UIWebTablet) {
if (UIWebTablet.onClose) {
@ -178,14 +178,14 @@
print("TABLET closeTabletUI, UIWebTablet is null");
}
tabletRezzed = false;
gTablet = null
gTablet = null;
}
function updateShowTablet() {
var now = Date.now();
checkTablet()
checkTablet();
// close the WebTablet if it we go into toolbar mode.
var tabletShown = gTablet.tabletShown;
@ -270,7 +270,7 @@
}
if (channel === "home") {
if (UIWebTablet) {
checkTablet()
checkTablet();
gTablet.landscape = false;
}
}

View file

@ -48,9 +48,8 @@
// for toolbar-mode: go back to home screen, this will close the window.
tablet.gotoHomeScreen();
} else {
var tabletEntity = HMD.tabletID;
if (tabletEntity) {
Entities.editEntity(tabletEntity, {textures: JSON.stringify({"tex.close" : HOME_BUTTON_TEXTURE})});
if (HMD.tabletID) {
Entities.editEntity(HMD.tabletID, {textures: JSON.stringify({"tex.close" : HOME_BUTTON_TEXTURE})});
}
shouldActivateButton = true;
tablet.gotoWebScreen(USERS_URL);

View file

@ -173,8 +173,18 @@ Laser = function (side) {
// Normal laser operation with trigger.
intersection = Overlays.findRayIntersection(pickRay, PRECISION_PICKING, NO_INCLUDE_IDS, NO_EXCLUDE_IDS,
VISIBLE_ONLY);
var tabletIDs = [];
if (HMD.tabletID) {
tabletIDs.push(HMD.tabletID);
}
if (HMD.tabletScreenID) {
tabletIDs.push(HMD.tabletScreenID);
}
if (HMD.homeButtonID) {
tabletIDs.push(HMD.homeButtonID);
}
if (Reticle.pointingAtSystemOverlay || (intersection.overlayID
&& [HMD.tabletID, HMD.tabletScreenID, HMD.homeButtonID].indexOf(intersection.overlayID) !== -1)) {
&& tabletIDs.indexOf(intersection.overlayID) !== -1)) {
// No laser if pointing at HUD overlay or tablet; system provides lasers for these cases.
if (isLaserOn) {
isLaserOn = false;