From 41bf65ed5e51b1f0d2efeb9dff6aa28e76a73214 Mon Sep 17 00:00:00 2001 From: Dante Ruiz Date: Sat, 21 Jan 2017 00:34:24 +0000 Subject: [PATCH] home button improvments --- .../src/TabletScriptingInterface.cpp | 4 ++ .../src/TabletScriptingInterface.h | 3 +- scripts/system/libraries/WebTablet.js | 38 +++++++++++++------ scripts/system/marketplaces/marketplaces.js | 3 ++ scripts/system/menu.js | 3 ++ 5 files changed, 39 insertions(+), 12 deletions(-) diff --git a/libraries/script-engine/src/TabletScriptingInterface.cpp b/libraries/script-engine/src/TabletScriptingInterface.cpp index d874eb8db0..60aa63952d 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.cpp +++ b/libraries/script-engine/src/TabletScriptingInterface.cpp @@ -235,6 +235,10 @@ QObject* TabletProxy::addButton(const QVariant& properties) { return tabletButtonProxy.data(); } +bool TabletProxy::onHomeScreen() { + return _state == State::Home; +} + void TabletProxy::removeButton(QObject* tabletButtonProxy) { std::lock_guard guard(_mutex); diff --git a/libraries/script-engine/src/TabletScriptingInterface.h b/libraries/script-engine/src/TabletScriptingInterface.h index 4b8c792af3..4afb3cad0e 100644 --- a/libraries/script-engine/src/TabletScriptingInterface.h +++ b/libraries/script-engine/src/TabletScriptingInterface.h @@ -121,7 +121,8 @@ public: * @param msg {object|string} */ Q_INVOKABLE void emitScriptEvent(QVariant msg); - + + Q_INVOKABLE bool onHomeScreen(); QObject* getTabletSurface(); diff --git a/scripts/system/libraries/WebTablet.js b/scripts/system/libraries/WebTablet.js index a449b8065d..903065dd2e 100644 --- a/scripts/system/libraries/WebTablet.js +++ b/scripts/system/libraries/WebTablet.js @@ -23,13 +23,12 @@ var SENSOR_TO_ROOM_MATRIX = -2; var CAMERA_MATRIX = -7; var ROT_Y_180 = {x: 0, y: 1, z: 0, w: 0}; -var TABLET_URL = "http://hifi-content.s3.amazonaws.com/alan/dev/Tablet-Model-v1-x.fbx"; +var TABLET_URL = "http://hifi-content.s3.amazonaws.com/alan/dev/tablet-with-home-button.fbx"; // will need to be recaclulated if dimensions of fbx model change. var TABLET_NATURAL_DIMENSIONS = {x: 33.797, y: 50.129, z: 2.269}; - -var HOME_BUTTON_URL = "http://hifi-content.s3.amazonaws.com/alan/dev/tablet-home-button.fbx"; - +var HOME_BUTTON_TEXTURE = "http://hifi-content.s3.amazonaws.com/alan/dev/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"; // returns object with two fields: // * position - position in front of the user // * rotation - rotation of entity so it faces the user. @@ -94,7 +93,7 @@ WebTablet = function (url, width, dpi, hand, clientOnly) { var tabletProperties = { name: "WebTablet Tablet", type: "Model", - modelURL: TABLET_URL, + modelURL: TABLET_MODEL_PATH, userData: JSON.stringify({ "grabbableKey": {"grabbable": true} }), @@ -130,14 +129,14 @@ WebTablet = function (url, width, dpi, hand, clientOnly) { }); var HOME_BUTTON_Y_OFFSET = (this.height / 2) - 0.035; - this.homeButtonEntity = Overlays.addOverlay("model", { + this.homeButtonEntity = Overlays.addOverlay("sphere", { name: "homeButton", - url: Script.resourcesPath() + "meshes/tablet-home-button.fbx", localPosition: {x: 0.0, y: -HOME_BUTTON_Y_OFFSET, z: -0.01}, localRotation: Quat.angleAxis(0, Y_AXIS), - solid: true, - visible: true, dimensions: { x: 0.04, y: 0.04, z: 0.02}, + alpha: 0.0, + visible: true, + alpha: 0.0, drawInFront: false, parentID: this.tabletEntityID, parentJointIndex: -1 @@ -146,7 +145,13 @@ WebTablet = function (url, width, dpi, hand, clientOnly) { this.receive = function (channel, senderID, senderUUID, localOnly) { if (_this.homeButtonEntity === parseInt(senderID)) { var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); - tablet.gotoHomeScreen(); + var onHomeScreen = tablet.onHomeScreen(); + if (onHomeScreen) { + HMD.closeTablet(); + } else { + tablet.gotoHomeScreen(); + _this.setHomeButtonTexture(); + } } }; @@ -189,6 +194,11 @@ WebTablet = function (url, width, dpi, hand, clientOnly) { this.initialLocalPosition = {x: 0, y: 0, z: 0}; }; +WebTablet.prototype.setHomeButtonTexture = function() { + print(this.homeButtonEntity); + Entities.editEntity(this.tabletEntityID, {textures: JSON.stringify({"tex.close": HOME_BUTTON_TEXTURE})}); +} + WebTablet.prototype.setURL = function (url) { Overlays.editOverlay(this.webOverlayID, { url: url }); }; @@ -321,7 +331,13 @@ WebTablet.prototype.mousePressEvent = function (event) { var overlayPickResults = Overlays.findRayIntersection(pickRay); if (overlayPickResults.intersects && overlayPickResults.overlayID === HMD.homeButtonID) { var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); - tablet.gotoHomeScreen(); + var onHomeScreen = tablet.onHomeScreen(); + if (onHomeScreen) { + HMD.closeTablet(); + } else { + tablet.gotoHomeScreen(); + this.setHomeButtonTexture(); + } } else if (!overlayPickResults.intersects || !overlayPickResults.overlayID === this.webOverlayID) { this.dragging = true; var invCameraXform = new Xform(Camera.orientation, Camera.position).inv(); diff --git a/scripts/system/marketplaces/marketplaces.js b/scripts/system/marketplaces/marketplaces.js index 70a2aa5fb5..3e06b05edc 100644 --- a/scripts/system/marketplaces/marketplaces.js +++ b/scripts/system/marketplaces/marketplaces.js @@ -19,6 +19,7 @@ var MARKETPLACE_URL = "https://metaverse.highfidelity.com/marketplace"; var MARKETPLACE_URL_INITIAL = MARKETPLACE_URL + "?"; // Append "?" to signal injected script that it's the initial page. var MARKETPLACES_URL = Script.resolvePath("../html/marketplaces.html"); var MARKETPLACES_INJECT_SCRIPT_URL = Script.resolvePath("../html/js/marketplacesInject.js"); +var HOME_BUTTON_TEXTURE = "http://hifi-content.s3.amazonaws.com/alan/dev/tablet-with-home-button.fbx/tablet-with-home-button.fbm/button-root.png"; // Event bridge messages. var CLARA_IO_DOWNLOAD = "CLARA.IO DOWNLOAD"; @@ -96,6 +97,8 @@ function showMarketplace() { } function toggleMarketplace() { + var entity = HMD.tabletID; + Entities.editEntity(entity, {textures: JSON.stringify({"tex.close": HOME_BUTTON_TEXTURE})}); showMarketplace(); } diff --git a/scripts/system/menu.js b/scripts/system/menu.js index 94097271bf..0481bc8296 100644 --- a/scripts/system/menu.js +++ b/scripts/system/menu.js @@ -9,6 +9,7 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // +var HOME_BUTTON_TEXTURE = "http://hifi-content.s3.amazonaws.com/alan/dev/tablet-with-home-button.fbx/tablet-with-home-button.fbm/button-root.png"; (function() { var tablet = Tablet.getTablet("com.highfidelity.interface.tablet.system"); var button = tablet.addButton({ @@ -18,6 +19,8 @@ function onClicked() { + var entity = HMD.tabletID; + Entities.editEntity(entity, {textures: JSON.stringify({"tex.close": HOME_BUTTON_TEXTURE})}); tablet.gotoMenuScreen(); }