From d78c571df6f63e6a0df5dee36d25b8312c716999 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Tue, 7 Aug 2018 10:56:53 -0700 Subject: [PATCH 1/3] revert to use overlays instead of entities for tablet highlighting --- .../src/scripting/HMDScriptingInterface.h | 20 ++--- scripts/system/libraries/WebTablet.js | 88 ++++++++----------- scripts/system/libraries/utils.js | 8 +- scripts/system/marketplaces/marketplaces.js | 1 + scripts/system/tablet-ui/tabletUI.js | 9 +- 5 files changed, 59 insertions(+), 67 deletions(-) diff --git a/interface/src/scripting/HMDScriptingInterface.h b/interface/src/scripting/HMDScriptingInterface.h index 69b04173b2..a8fec839eb 100644 --- a/interface/src/scripting/HMDScriptingInterface.h +++ b/interface/src/scripting/HMDScriptingInterface.h @@ -56,8 +56,7 @@ class QScriptEngine; * @property {Uuid} tabletID - The UUID of the tablet body model overlay. * @property {Uuid} tabletScreenID - The UUID of the tablet's screen overlay. * @property {Uuid} homeButtonID - The UUID of the tablet's "home" button overlay. - * @property {Uuid} homeButtonHighlightMaterialID - The UUID of the material entity used to highlight tablet button - * @property {Uuid} homeButtonUnhighlightMaterialID - The UUID of the material entity use to unhighlight the entity + * @property {Uuid} homeButtonHighlightID - The UUID of the tablet's "home" button highlight overlay. */ class HMDScriptingInterface : public AbstractHMDScriptingInterface, public Dependency { Q_OBJECT @@ -69,11 +68,10 @@ class HMDScriptingInterface : public AbstractHMDScriptingInterface, public Depen Q_PROPERTY(QUuid tabletID READ getCurrentTabletFrameID WRITE setCurrentTabletFrameID) Q_PROPERTY(QUuid homeButtonID READ getCurrentHomeButtonID WRITE setCurrentHomeButtonID) Q_PROPERTY(QUuid tabletScreenID READ getCurrentTabletScreenID WRITE setCurrentTabletScreenID) - Q_PROPERTY(QUuid homeButtonHighlightMaterialID READ getCurrentHomeButtonHighlightMaterialID WRITE setCurrentHomeButtonHighlightMaterialID) - Q_PROPERTY(QUuid homeButtonUnhighlightMaterialID READ getCurrentHomeButtonUnhighlightMaterialID WRITE setCurrentHomeButtonUnhighlightMaterialID) + Q_PROPERTY(QUuid homeButtonHighlightID READ getCurrentHomeButtonHighlightID WRITE setCurrentHomeButtonHighlightID) public: - + /**jsdoc * Calculate the intersection of a ray with the HUD overlay. * @function HMD.calculateRayUICollisionPoint @@ -365,15 +363,12 @@ public: void setCurrentHomeButtonID(QUuid homeButtonID) { _homeButtonID = homeButtonID; } QUuid getCurrentHomeButtonID() const { return _homeButtonID; } + void setCurrentHomeButtonHighlightID(QUuid homeButtonHighlightID) { _homeButtonHighlightID = homeButtonHighlightID; } + QUuid getCurrentHomeButtonHighlightID() const { return _homeButtonHighlightID; } + void setCurrentTabletScreenID(QUuid tabletID) { _tabletScreenID = tabletID; } QUuid getCurrentTabletScreenID() const { return _tabletScreenID; } - void setCurrentHomeButtonHighlightMaterialID(QUuid homeButtonHighlightMaterialID) { _homeButtonHighlightMaterialID = homeButtonHighlightMaterialID; } - QUuid getCurrentHomeButtonHighlightMaterialID() { return _homeButtonHighlightMaterialID; } - - void setCurrentHomeButtonUnhighlightMaterialID(QUuid homeButtonUnhighlightMaterialID) { _homeButtonUnhighlightMaterialID = homeButtonUnhighlightMaterialID; } - QUuid getCurrentHomeButtonUnhighlightMaterialID() { return _homeButtonUnhighlightMaterialID; } - private: bool _showTablet { false }; bool _tabletContextualMode { false }; @@ -381,8 +376,7 @@ private: QUuid _tabletScreenID; // this is the overlayID which is part of (a child of) the tablet-ui. QUuid _homeButtonID; QUuid _tabletEntityID; - QUuid _homeButtonHighlightMaterialID; - QUuid _homeButtonUnhighlightMaterialID; + QUuid _homeButtonHighlightID; // Get the position of the HMD glm::vec3 getPosition() const; diff --git a/scripts/system/libraries/WebTablet.js b/scripts/system/libraries/WebTablet.js index f83f961438..5f172c081d 100644 --- a/scripts/system/libraries/WebTablet.js +++ b/scripts/system/libraries/WebTablet.js @@ -87,8 +87,7 @@ cleanUpOldMaterialEntities = function() { for (var entityID in avatarEntityData) { var entityName = Entities.getEntityProperties(entityID, ["name"]).name; - if (entityName === TABLET_MATERIAL_ENTITY_NAME && entityID !== HMD.homeButtonHighlightMaterialID && - entityID !== HMD.homeButtonUnhighlightMaterialID) { + if (entityName === TABLET_MATERIAL_ENTITY_NAME) { Entities.deleteEntity(entityID); } } @@ -194,45 +193,21 @@ WebTablet = function (url, width, dpi, hand, clientOnly, location, visible) { parentJointIndex: -1 }); - this.homeButtonUnhighlightMaterial = Entities.addEntity({ - type: "Material", - name: TABLET_MATERIAL_ENTITY_NAME, - materialURL: "materialData", - localPosition: { x: 0.0, y: 0.0, z: 0.0 }, - priority: HIGH_PRIORITY, - materialData: JSON.stringify({ - materials: { - albedoMap: LOCAL_NORMAL_BEZEL - } - - }), - userData: JSON.stringify({ - "grabbableKey": {"grabbable": false} - }), - visible: false, - parentMaterialName: SUBMESH, - parentID: this.tabletEntityID - }, true); - - this.homeButtonHighlightMaterial = Entities.addEntity({ - type: "Material", - name: TABLET_MATERIAL_ENTITY_NAME, - materialURL: "materialData", - localPosition: { x: 0.0, y: 0.0, z: 0.0 }, - priority: LOW_PRIORITY, - visible: false, - materialData: JSON.stringify({ - materials: { - emissiveMap: LOCAL_BEZEL_HIGHLIGHT - } - - }), - userData: JSON.stringify({ - "grabbableKey": {"grabbable": false} - }), - parentMaterialName: SUBMESH, - parentID: this.tabletEntityID - }, true); + this.homeButtonHighlightID = Overlays.addOverlay("circle3d", { + name: "homeButtonHighlight", + localPosition: { x: -HOME_BUTTON_X_OFFSET, y: HOME_BUTTON_Y_OFFSET, z: -HOME_BUTTON_Z_OFFSET }, + localRotation: { x: 0, y: 1, z: 0, w: 0}, + dimensions: { x: homeButtonDim, y: homeButtonDim, z: homeButtonDim }, + color: {red: 255, green: 255, blue: 255}, + solid: true, + innerRadius: 0.9, + ignoreIntersection: true, + alpha: 0.0, + visible: visible, + drawInFront: false, + parentID: this.tabletEntityID, + parentJointIndex: -1 + }); this.receive = function (channel, senderID, senderUUID, localOnly) { if (_this.homeButtonID === senderID) { @@ -387,8 +362,7 @@ WebTablet.prototype.destroy = function () { Overlays.deleteOverlay(this.webOverlayID); Overlays.deleteOverlay(this.tabletEntityID); Overlays.deleteOverlay(this.homeButtonID); - Entities.deleteEntity(this.homeButtonUnhighlightMaterial); - Entities.deleteEntity(this.homeButtonHighlightMaterial); + Overlays.deleteOverlay(this.homeButtonHighlightID); HMD.displayModeChanged.disconnect(this.myOnHmdChanged); Controller.mousePressEvent.disconnect(this.myMousePressEvent); @@ -482,22 +456,19 @@ WebTablet.prototype.calculateWorldAttitudeRelativeToCamera = function (windowPos WebTablet.prototype.onHoverEnterOverlay = function (overlayID, pointerEvent) { if (overlayID === this.homeButtonID) { - Entities.editEntity(this.homeButtonUnhighlightMaterial, {priority: LOW_PRIORITY}); - Entities.editEntity(this.homeButtonHighlightMaterial, {priority: HIGH_PRIORITY}); + Overlays.editOverlay(this.homeButtonHighlightID, { alpha: 1.0 }); } }; WebTablet.prototype.onHoverOverOverlay = function (overlayID, pointerEvent) { if (overlayID !== this.homeButtonID) { - Entities.editEntity(this.homeButtonUnhighlightMaterial, {priority: HIGH_PRIORITY}); - Entities.editEntity(this.homeButtonHighlightMaterial, {priority: LOW_PRIORITY}); + Overlays.editOverlay(this.homeButtonHighlightID, { alpha: 0.0 }); } }; WebTablet.prototype.onHoverLeaveOverlay = function (overlayID, pointerEvent) { if (overlayID === this.homeButtonID) { - Entities.editEntity(this.homeButtonUnhighlightMaterial, {priority: HIGH_PRIORITY}); - Entities.editEntity(this.homeButtonHighlightMaterial, {priority: LOW_PRIORITY}); + Overlays.editOverlay(this.homeButtonHighlightID, { alpha: 0.0 }); } }; @@ -627,6 +598,21 @@ WebTablet.prototype.scheduleMouseMoveProcessor = function() { } }; +WebTablet.prototype.handleMouseButtonHover = function(x, y) { + var pickRay = Camera.computePickRay(x, y); + var entityPickResults; + var homebuttonHovered = false; + entityPickResults = Overlays.findRayIntersection(pickRay, true, [this.tabletEntityID]); + if (entityPickResults.intersects && (entityPickResults.entityID === this.tabletEntityID || + entityPickResults.overlayID === this.tabletEntityID)) { + var overlayPickResults = Overlays.findRayIntersection(pickRay, true, [this.homeButtonID], []); + if (overlayPickResults.intersects && overlayPickResults.overlayID === this.homeButtonID) { + homebuttonHovered = true; + } + } + Overlays.editOverlay(this.homeButtonHighlightID, { alpha: homebuttonHovered ? 1.0 : 0.0 }); +}; + WebTablet.prototype.mouseMoveEvent = function (event) { if (this.dragging) { this.currentMouse = { @@ -634,6 +620,8 @@ WebTablet.prototype.mouseMoveEvent = function (event) { y: event.y }; this.scheduleMouseMoveProcessor(); + } else { + this.handleHomeButtonHover(event.x, event.y); } }; @@ -660,6 +648,8 @@ WebTablet.prototype.mouseMoveProcessor = function () { }); } this.scheduleMouseMoveProcessor(); + } else { + this.handleHomeButtonHover(this.currentMouse.x, this.currentMouse.y); } }; diff --git a/scripts/system/libraries/utils.js b/scripts/system/libraries/utils.js index 220ecd1959..f7b5f6db8d 100644 --- a/scripts/system/libraries/utils.js +++ b/scripts/system/libraries/utils.js @@ -370,7 +370,7 @@ getTabletWidthFromSettings = function () { resizeTablet = function (width, newParentJointIndex, sensorToWorldScaleOverride) { - if (!HMD.tabletID || !HMD.tabletScreenID || !HMD.homeButtonID) { + if (!HMD.tabletID || !HMD.tabletScreenID || !HMD.homeButtonID || !HMD.homeButtonHighlightID) { return; } var sensorScaleFactor = sensorToWorldScaleOverride || MyAvatar.sensorToWorldScale; @@ -422,6 +422,12 @@ resizeTablet = function (width, newParentJointIndex, sensorToWorldScaleOverride) localRotation: { x: 0, y: 1, z: 0, w: 0 }, dimensions: { x: homeButtonDim, y: homeButtonDim, z: homeButtonDim } }); + + Overlays.editOverlay(HMD.homeButtonHighlightID, { + localPosition: { x: -HOME_BUTTON_X_OFFSET, y: HOME_BUTTON_Y_OFFSET, z: -HOME_BUTTON_Z_OFFSET }, + localRotation: { x: 0, y: 1, z: 0, w: 0 }, + dimensions: { x: homeButtonDim, y: homeButtonDim, z: homeButtonDim } + }); }; getMainTabletIDs = function () { diff --git a/scripts/system/marketplaces/marketplaces.js b/scripts/system/marketplaces/marketplaces.js index fd7b9c703a..7b4f05193f 100644 --- a/scripts/system/marketplaces/marketplaces.js +++ b/scripts/system/marketplaces/marketplaces.js @@ -114,6 +114,7 @@ var selectionDisplay = null; // for gridTool.js to ignore Overlays.editOverlay(HMD.tabletID, { isVisibleInSecondaryCamera : visibleInSecondaryCam }); Overlays.editOverlay(HMD.homeButtonID, { isVisibleInSecondaryCamera : visibleInSecondaryCam }); + Overlays.editOverlay(HMD.homeButtonHighlightID, { isVisibleInSecondaryCamera : visibleInSecondaryCam }); Overlays.editOverlay(HMD.tabletScreenID, { isVisibleInSecondaryCamera : visibleInSecondaryCam }); } diff --git a/scripts/system/tablet-ui/tabletUI.js b/scripts/system/tablet-ui/tabletUI.js index bd6a9c69d5..f339475f72 100644 --- a/scripts/system/tablet-ui/tabletUI.js +++ b/scripts/system/tablet-ui/tabletUI.js @@ -112,8 +112,7 @@ HMD.tabletID = UIWebTablet.tabletEntityID; HMD.homeButtonID = UIWebTablet.homeButtonID; HMD.tabletScreenID = UIWebTablet.webOverlayID; - HMD.homeButtonHighlightMaterialID = UIWebTablet.homeButtonHighlightMaterial; - HMD.homeButtonUnhighlightMaterialID = UIWebTablet.homeButtonUnhighlightMaterial; + HMD.homeButtonHighlightID = UIWebTablet.homeButtonHighlightID; HMD.displayModeChanged.connect(onHmdChanged); MyAvatar.sensorToWorldScaleChanged.connect(onSensorToWorldScaleChanged); @@ -139,6 +138,7 @@ tabletProperties.visible = true; Overlays.editOverlay(HMD.tabletID, tabletProperties); Overlays.editOverlay(HMD.homeButtonID, { visible: true }); + Overlays.editOverlay(HMD.homeButtonHighlightID, { visible: true }); Overlays.editOverlay(HMD.tabletScreenID, { visible: true }); Overlays.editOverlay(HMD.tabletScreenID, { maxFPS: 90 }); updateTabletWidthFromSettings(true); @@ -159,6 +159,7 @@ Overlays.editOverlay(HMD.tabletID, { visible: false }); Overlays.editOverlay(HMD.homeButtonID, { visible: false }); + Overlays.editOverlay(HMD.homeButtonHighlightID, { visible: false }); Overlays.editOverlay(HMD.tabletScreenID, { visible: false }); Overlays.editOverlay(HMD.tabletScreenID, { maxFPS: 1 }); } @@ -179,6 +180,7 @@ UIWebTablet = null; HMD.tabletID = null; HMD.homeButtonID = null; + HMD.homeButtonHighlightID = null; HMD.tabletScreenID = null; } else if (debugTablet) { print("TABLET closeTabletUI, UIWebTablet is null"); @@ -331,9 +333,8 @@ Overlays.deleteOverlay(tabletID); HMD.tabletID = null; HMD.homeButtonID = null; + HMD.homeButtonHighlightID = null; HMD.tabletScreenID = null; - HMD.homeButtonHighlightMaterialID = null; - HMD.homeButtonUnhighlightMaterialID = null; }); Script.setTimeout(cleanupMaterialEntities, 100); }()); // END LOCAL_SCOPE From 8c5eefcc95ef5bea4a262697cdcc5c011e066e44 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Tue, 7 Aug 2018 10:58:45 -0700 Subject: [PATCH 2/3] some file and code cleanup --- interface/resources/images/buttonBezel.png | Bin 1530 -> 0 bytes .../resources/images/buttonBezel_highlight.png | Bin 1528 -> 0 bytes scripts/system/libraries/WebTablet.js | 2 -- 3 files changed, 2 deletions(-) delete mode 100644 interface/resources/images/buttonBezel.png delete mode 100644 interface/resources/images/buttonBezel_highlight.png diff --git a/interface/resources/images/buttonBezel.png b/interface/resources/images/buttonBezel.png deleted file mode 100644 index fe55855462bbd395ee3cc24095ea772c087dee13..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1530 zcmeAS@N?(olHy`uVBq!ia0y~yU}6Aa4iHr><-C@GfkCpwHKHUqKdq!Zu_%?nF(p4K zRlzeiF+DXXH8G{K@MNkD0|V+ zq9_4Vo(3q%KHzX5Gv;90U^Mv-L5dA>nB?d|bu^`EfC9fm9716nlB|74BqJNcwX-Z5 V--?n-85kHCJYD@<);T3K0RZp1r`iAj diff --git a/interface/resources/images/buttonBezel_highlight.png b/interface/resources/images/buttonBezel_highlight.png deleted file mode 100644 index ab0a99e4c566b7bcbdfb4d80edba8b0c454bcd28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1528 zcmeAS@N?(olHy`uVBq!ia0y~yU}6Aa4iHr><-C@GfkCpwHKHUqKdq!Zu_%?nF(p4K zRlzeiF+DXXH8G{K@MNkD0|VbkP#_29j^UEeNJ(xd{ z;Q#}J0RsaM0|PTz%z@R;z)X?jDc630f}n$hIN2c&k1+Bg4z7(t?K}gV1P(B$3~(Bt zB>O-@pTaaip>_jAS|HP;A)bUNF9t|X0u8f86BsHJ+5XzR@GxLtU|{fc^>bP0l+XkK DqoAg_ diff --git a/scripts/system/libraries/WebTablet.js b/scripts/system/libraries/WebTablet.js index 5f172c081d..a5bc586f0d 100644 --- a/scripts/system/libraries/WebTablet.js +++ b/scripts/system/libraries/WebTablet.js @@ -39,8 +39,6 @@ var TABLET_NATURAL_DIMENSIONS = {x: 32.083, y: 48.553, z: 2.269}; var HOME_BUTTON_TEXTURE = Script.resourcesPath() + "images/button-close.png"; // var HOME_BUTTON_TEXTURE = Script.resourcesPath() + "meshes/tablet-with-home-button.fbx/tablet-with-home-button.fbm/button-close.png"; // var TABLET_MODEL_PATH = "http://hifi-content.s3.amazonaws.com/alan/dev/tablet-with-home-button.fbx"; -var LOCAL_BEZEL_HIGHLIGHT = Script.resourcesPath() + "images/buttonBezel_highlight.png"; -var LOCAL_NORMAL_BEZEL = Script.resourcesPath() + "images/buttonBezel.png"; var LOCAL_TABLET_MODEL_PATH = Script.resourcesPath() + "meshes/tablet-with-home-button-small-bezel.fbx"; var HIGH_PRIORITY = 1; From 269afb9a49faa13263548d70c273b8567023ab4d Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Tue, 7 Aug 2018 11:19:22 -0700 Subject: [PATCH 3/3] remove tablet material entities code remove create --- .../controllerModules/inEditMode.js | 19 +++++-------------- scripts/system/libraries/entityList.js | 9 --------- 2 files changed, 5 insertions(+), 23 deletions(-) diff --git a/scripts/system/controllers/controllerModules/inEditMode.js b/scripts/system/controllers/controllerModules/inEditMode.js index 3e53d5af12..d590545532 100644 --- a/scripts/system/controllers/controllerModules/inEditMode.js +++ b/scripts/system/controllers/controllerModules/inEditMode.js @@ -19,7 +19,6 @@ Script.include("/~/system/libraries/utils.js"); (function () { var MARGIN = 25; - var TABLET_MATERIAL_ENTITY_NAME = 'Tablet-Material-Entity'; function InEditMode(hand) { this.hand = hand; this.triggerClicked = false; @@ -77,13 +76,11 @@ Script.include("/~/system/libraries/utils.js"); } } if (this.selectedTarget.type === Picks.INTERSECTED_ENTITY) { - if (!this.isTabletMaterialEntity(this.selectedTarget.objectID)) { - Messages.sendLocalMessage("entityToolUpdates", JSON.stringify({ - method: "selectEntity", - entityID: this.selectedTarget.objectID, - hand: hand - })); - } + Messages.sendLocalMessage("entityToolUpdates", JSON.stringify({ + method: "selectEntity", + entityID: this.selectedTarget.objectID, + hand: hand + })); } else if (this.selectedTarget.type === Picks.INTERSECTED_OVERLAY) { Messages.sendLocalMessage("entityToolUpdates", JSON.stringify({ method: "selectOverlay", @@ -98,12 +95,6 @@ Script.include("/~/system/libraries/utils.js"); this.sendPointingAtData(controllerData); }; - - this.isTabletMaterialEntity = function(entityID) { - return ((entityID === HMD.homeButtonHighlightMaterialID) || - (entityID === HMD.homeButtonUnhighlightMaterialID)); - }; - this.sendPointingAtData = function(controllerData) { var rayPick = controllerData.rayPicks[this.hand]; var hudRayPick = controllerData.hudRayPicks[this.hand]; diff --git a/scripts/system/libraries/entityList.js b/scripts/system/libraries/entityList.js index 24b90e3a44..fb876302dd 100644 --- a/scripts/system/libraries/entityList.js +++ b/scripts/system/libraries/entityList.js @@ -111,11 +111,6 @@ EntityListTool = function(shouldUseEditTabletApp) { return value !== undefined ? value : ""; } - function filterEntity(entityID) { - return ((entityID === HMD.homeButtonHighlightMaterialID) || - (entityID === HMD.homeButtonUnhighlightMaterialID)); - } - that.sendUpdate = function() { var entities = []; @@ -126,10 +121,6 @@ EntityListTool = function(shouldUseEditTabletApp) { ids = Entities.findEntities(MyAvatar.position, searchRadius); } - ids = ids.filter(function(id) { - return !filterEntity(id); - }); - var cameraPosition = Camera.position; for (var i = 0; i < ids.length; i++) { var id = ids[i];