From 7ad590c578ffeb6f8bcc45b198fded3a4a427601 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 29 Oct 2014 13:20:21 -0700 Subject: [PATCH 1/3] don't replace url query in XMLHttpRequest class --- libraries/script-engine/src/XMLHttpRequestClass.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/libraries/script-engine/src/XMLHttpRequestClass.cpp b/libraries/script-engine/src/XMLHttpRequestClass.cpp index fc8216551b..dec20dface 100644 --- a/libraries/script-engine/src/XMLHttpRequestClass.cpp +++ b/libraries/script-engine/src/XMLHttpRequestClass.cpp @@ -14,6 +14,7 @@ #include #include +#include #include @@ -207,7 +208,14 @@ void XMLHttpRequestClass::open(const QString& method, const QString& url, bool a } } else { if (url.toLower().left(33) == "https://data.highfidelity.io/api/") { - _url.setQuery("access_token=" + AccountManager::getInstance().getAccountInfo().getAccessToken().token); + AccountManager& accountManager = AccountManager::getInstance(); + + if (accountManager.hasValidAccessToken()) { + QUrlQuery urlQuery(_url.query()); + urlQuery.addQueryItem("access_token", accountManager.getAccountInfo().getAccessToken().token); + _url.setQuery(urlQuery); + } + } if (!username.isEmpty()) { _url.setUserName(username); From cb4ae5f1bb7f779be664fa89712ddfd16c860e12 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 29 Oct 2014 13:43:59 -0700 Subject: [PATCH 2/3] initial version of the lobby script to jump to locations --- examples/lobby.js | 119 ++++++++++++++++++++++++++ examples/testModelOverlaySubMeshes.js | 87 ------------------- 2 files changed, 119 insertions(+), 87 deletions(-) create mode 100644 examples/lobby.js delete mode 100644 examples/testModelOverlaySubMeshes.js diff --git a/examples/lobby.js b/examples/lobby.js new file mode 100644 index 0000000000..1b65ae60c0 --- /dev/null +++ b/examples/lobby.js @@ -0,0 +1,119 @@ +// +// lobby.js +// examples +// +// Created by Stephen Birarda on October 17, 2014 +// Copyright 2014 High Fidelity, Inc. +// +// Distributed under the Apache License, Version 2.0. +// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html +// + +var panelWall = false; + +var avatarStickPosition = {}; + +var panelsNaturalExtentsMin = { x: -1181, y: -326, z: 56 }; +var panelsNaturalExtentsMax = { x: 1181, y: 576, z: 1183 }; + +var panelsNaturalDimensions = Vec3.subtract(panelsNaturalExtentsMax, panelsNaturalExtentsMin); +var SCALING_FACTOR = 0.01; +var panelsDimensions = Vec3.multiply(panelsNaturalDimensions, SCALING_FACTOR); + +function drawLobby() { + if (!panelWall) { + print("Adding an overlay for the lobby panel wall.") + + var front = Quat.getFront(Camera.getOrientation()); + front.y = 0 + front = Vec3.normalize(front) + + var cameraEuler = Quat.safeEulerAngles(Camera.getOrientation()); + + var panelWallProps = { + url: "https://s3.amazonaws.com/hifi-public/models/sets/Lobby/LobbyPrototype/PanelWall3.fbx", + position: Vec3.sum(Camera.getPosition(), Vec3.multiply(front, 0.5)), + rotation: Quat.angleAxis(cameraEuler.y + 180, { x: 0, y: 1, z: 0}), + dimensions: panelsDimensions + } + + avatarStickPosition = MyAvatar.position + + panelWall = Overlays.addOverlay("model", panelWallProps) + } +} + +var locations = {} + +function changeLobbyTextures() { + var req = new XMLHttpRequest(); + req.open("GET", "https://data.highfidelity.io/api/v1/locations?limit=21", false); + req.send(); + + locations = JSON.parse(req.responseText).data.locations + + var NUM_PANELS = locations.length; + + var textureProp = { + textures: {} + }; + + for (var j = 0; j < NUM_PANELS; j++) { + textureProp["textures"]["file" + (j + 1)] = "http:" + locations[j].thumbnail_url + } + + Overlays.editOverlay(panelWall, textureProp) +} + +function cleanupLobby() { + Overlays.deleteOverlay(panelWall) + panelWall = false + locations = {} +} + +function actionStartEvent(event) { + if (panelWall) { + // we've got an action event and our panel wall is up + // check if we hit a panel and if we should jump there + var pickRay = Camera.computePickRay(event.x, event.y); + var result = Overlays.findRayIntersection(pickRay); + + if (result.intersects && result.overlayID == panelWall) { + var panelName = result.extraInfo + var panelStringIndex = panelName.indexOf("Panel") + if (panelStringIndex != -1) { + var panelIndex = parseInt(panelName.slice(5)) - 1 + if (panelIndex < locations.length) { + var actionLocation = locations[panelIndex] + + print("Jumping to " + actionLocation.name + " at " + actionLocation.path + " in " + actionLocation.domain.name) + + Window.location = actionLocation + maybeCleanupLobby() + } + } + } + } +} + +function backStartEvent() { + if (!panelWall) { + drawLobby() + changeLobbyTextures() + } else { + cleanupLobby() + } +} + +var CLEANUP_EPSILON_DISTANCE = 0.025 + +function maybeCleanupLobby() { + if (Vec3.length(Vec3.subtract(avatarStickPosition, MyAvatar.position)) > CLEANUP_EPSILON_DISTANCE) { + cleanupLobby() + } +} + +Controller.actionStartEvent.connect(actionStartEvent) +Controller.backStartEvent.connect(backStartEvent) +Script.update.connect(maybeCleanupLobby) +Script.scriptEnding.connect(maybeCleanupLobby); \ No newline at end of file diff --git a/examples/testModelOverlaySubMeshes.js b/examples/testModelOverlaySubMeshes.js deleted file mode 100644 index 5195b76e60..0000000000 --- a/examples/testModelOverlaySubMeshes.js +++ /dev/null @@ -1,87 +0,0 @@ -var position = Vec3.sum(MyAvatar.position, { x: 0, y: -1, z: 0}); - -var scalingFactor = 0.01; - -var sphereNaturalExtentsMin = { x: -1230, y: -1223, z: -1210 }; -var sphereNaturalExtentsMax = { x: 1230, y: 1229, z: 1223 }; -var panelsNaturalExtentsMin = { x: -1181, y: -326, z: 56 }; -var panelsNaturalExtentsMax = { x: 1181, y: 576, z: 1183 }; - -var sphereNaturalDimensions = Vec3.subtract(sphereNaturalExtentsMax, sphereNaturalExtentsMin); -var panelsNaturalDimensions = Vec3.subtract(panelsNaturalExtentsMax, panelsNaturalExtentsMin); -Vec3.print("sphereNaturalDimensions:", sphereNaturalDimensions); -Vec3.print("panelsNaturalDimensions:", panelsNaturalDimensions); - -var sphereNaturalCenter = Vec3.sum(sphereNaturalExtentsMin, Vec3.multiply(sphereNaturalDimensions, 0.5)); -var panelsNaturalCenter = Vec3.sum(panelsNaturalExtentsMin, Vec3.multiply(panelsNaturalDimensions, 0.5)); -Vec3.print("sphereNaturalCenter:", sphereNaturalCenter); -Vec3.print("panelsNaturalCenter:", panelsNaturalCenter); - -var sphereDimensions = Vec3.multiply(sphereNaturalDimensions, scalingFactor); -var panelsDimensions = Vec3.multiply(panelsNaturalDimensions, scalingFactor); -Vec3.print("sphereDimensions:", sphereDimensions); -Vec3.print("panelsDimensions:", panelsDimensions); - -var sphereCenter = Vec3.multiply(sphereNaturalCenter, scalingFactor); -var panelsCenter = Vec3.multiply(panelsNaturalCenter, scalingFactor); -Vec3.print("sphereCenter:", sphereCenter); -Vec3.print("panelsCenter:", panelsCenter); - -var centerShift = Vec3.subtract(panelsCenter, sphereCenter); -Vec3.print("centerShift:", centerShift); - -var spherePosition = position; -Vec3.print("spherePosition:", spherePosition); -var panelsPosition = Vec3.sum(spherePosition, centerShift); -Vec3.print("panelsPosition:", panelsPosition); - - -var screensOverlay = Overlays.addOverlay("model", { - position: panelsPosition, - dimensions: panelsDimensions, - url: "https://s3.amazonaws.com/hifi-public/models/sets/Lobby/LobbyConcepts/Lobby5_IsolatedPanelsFreezeTransforms.fbx" - }); - - -var structureOverlay = Overlays.addOverlay("model", { - position: spherePosition, - dimensions: sphereDimensions, - url: "https://s3.amazonaws.com/hifi-public/models/sets/Lobby/LobbyConcepts/Lobby5_OrbShellOnly.fbx", - ignoreRayIntersection: true, // we don't want to ray pick against any of this - }); - -var statusText = Overlays.addOverlay("text", { - x: 200, - y: 100, - width: 200, - height: 20, - backgroundColor: { red: 0, green: 0, blue: 0}, - alpha: 1.0, - color: { red: 255, green: 255, blue: 255}, - topMargin: 4, - leftMargin: 4, - text: "", - }); - - -Controller.mouseMoveEvent.connect(function(event){ - var pickRay = Camera.computePickRay(event.x, event.y); - var result = Overlays.findRayIntersection(pickRay); - - if (result.intersects) { - if (result.overlayID == screensOverlay) { - Overlays.editOverlay(statusText, { text: "You are pointing at: " + result.extraInfo }); - } else { - Overlays.editOverlay(statusText, { text: "You are not pointing at a panel..." }); - } - } else { - Overlays.editOverlay(statusText, { text: "You are not pointing at a panel..." }); - } -}); - - -Script.scriptEnding.connect(function(){ - Overlays.deleteOverlay(screensOverlay); - Overlays.deleteOverlay(structureOverlay); - Overlays.deleteOverlay(statusText); -}); From ed098be2bc61cacf841f09a375f3ad8ea18fdb58 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 29 Oct 2014 13:49:12 -0700 Subject: [PATCH 3/3] don't remove testModelOverlaySubMeshes --- examples/testModelOverlaySubMeshes.js | 87 +++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 examples/testModelOverlaySubMeshes.js diff --git a/examples/testModelOverlaySubMeshes.js b/examples/testModelOverlaySubMeshes.js new file mode 100644 index 0000000000..5195b76e60 --- /dev/null +++ b/examples/testModelOverlaySubMeshes.js @@ -0,0 +1,87 @@ +var position = Vec3.sum(MyAvatar.position, { x: 0, y: -1, z: 0}); + +var scalingFactor = 0.01; + +var sphereNaturalExtentsMin = { x: -1230, y: -1223, z: -1210 }; +var sphereNaturalExtentsMax = { x: 1230, y: 1229, z: 1223 }; +var panelsNaturalExtentsMin = { x: -1181, y: -326, z: 56 }; +var panelsNaturalExtentsMax = { x: 1181, y: 576, z: 1183 }; + +var sphereNaturalDimensions = Vec3.subtract(sphereNaturalExtentsMax, sphereNaturalExtentsMin); +var panelsNaturalDimensions = Vec3.subtract(panelsNaturalExtentsMax, panelsNaturalExtentsMin); +Vec3.print("sphereNaturalDimensions:", sphereNaturalDimensions); +Vec3.print("panelsNaturalDimensions:", panelsNaturalDimensions); + +var sphereNaturalCenter = Vec3.sum(sphereNaturalExtentsMin, Vec3.multiply(sphereNaturalDimensions, 0.5)); +var panelsNaturalCenter = Vec3.sum(panelsNaturalExtentsMin, Vec3.multiply(panelsNaturalDimensions, 0.5)); +Vec3.print("sphereNaturalCenter:", sphereNaturalCenter); +Vec3.print("panelsNaturalCenter:", panelsNaturalCenter); + +var sphereDimensions = Vec3.multiply(sphereNaturalDimensions, scalingFactor); +var panelsDimensions = Vec3.multiply(panelsNaturalDimensions, scalingFactor); +Vec3.print("sphereDimensions:", sphereDimensions); +Vec3.print("panelsDimensions:", panelsDimensions); + +var sphereCenter = Vec3.multiply(sphereNaturalCenter, scalingFactor); +var panelsCenter = Vec3.multiply(panelsNaturalCenter, scalingFactor); +Vec3.print("sphereCenter:", sphereCenter); +Vec3.print("panelsCenter:", panelsCenter); + +var centerShift = Vec3.subtract(panelsCenter, sphereCenter); +Vec3.print("centerShift:", centerShift); + +var spherePosition = position; +Vec3.print("spherePosition:", spherePosition); +var panelsPosition = Vec3.sum(spherePosition, centerShift); +Vec3.print("panelsPosition:", panelsPosition); + + +var screensOverlay = Overlays.addOverlay("model", { + position: panelsPosition, + dimensions: panelsDimensions, + url: "https://s3.amazonaws.com/hifi-public/models/sets/Lobby/LobbyConcepts/Lobby5_IsolatedPanelsFreezeTransforms.fbx" + }); + + +var structureOverlay = Overlays.addOverlay("model", { + position: spherePosition, + dimensions: sphereDimensions, + url: "https://s3.amazonaws.com/hifi-public/models/sets/Lobby/LobbyConcepts/Lobby5_OrbShellOnly.fbx", + ignoreRayIntersection: true, // we don't want to ray pick against any of this + }); + +var statusText = Overlays.addOverlay("text", { + x: 200, + y: 100, + width: 200, + height: 20, + backgroundColor: { red: 0, green: 0, blue: 0}, + alpha: 1.0, + color: { red: 255, green: 255, blue: 255}, + topMargin: 4, + leftMargin: 4, + text: "", + }); + + +Controller.mouseMoveEvent.connect(function(event){ + var pickRay = Camera.computePickRay(event.x, event.y); + var result = Overlays.findRayIntersection(pickRay); + + if (result.intersects) { + if (result.overlayID == screensOverlay) { + Overlays.editOverlay(statusText, { text: "You are pointing at: " + result.extraInfo }); + } else { + Overlays.editOverlay(statusText, { text: "You are not pointing at a panel..." }); + } + } else { + Overlays.editOverlay(statusText, { text: "You are not pointing at a panel..." }); + } +}); + + +Script.scriptEnding.connect(function(){ + Overlays.deleteOverlay(screensOverlay); + Overlays.deleteOverlay(structureOverlay); + Overlays.deleteOverlay(statusText); +});