Merge pull request #3696 from birarda/lobby

tweaks to lobby to add the orb shell
This commit is contained in:
Brad Hefta-Gaub 2014-10-30 09:20:21 -07:00
commit 12c79b2be8

View file

@ -9,48 +9,87 @@
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
// //
Script.include("libraries/globals.js");
var panelWall = false; var panelWall = false;
var orbShell = false;
var reticle = false;
var avatarStickPosition = {}; var avatarStickPosition = {};
var orbNaturalExtentsMin = { x: -1230, y: -1223, z: -1210 };
var orbNaturalExtentsMax = { x: 1230, y: 1229, z: 1223 };
var panelsNaturalExtentsMin = { x: -1181, y: -326, z: 56 }; var panelsNaturalExtentsMin = { x: -1181, y: -326, z: 56 };
var panelsNaturalExtentsMax = { x: 1181, y: 576, z: 1183 }; var panelsNaturalExtentsMax = { x: 1181, y: 576, z: 1183 };
var orbNaturalDimensions = Vec3.subtract(orbNaturalExtentsMax, orbNaturalExtentsMin);
var panelsNaturalDimensions = Vec3.subtract(panelsNaturalExtentsMax, panelsNaturalExtentsMin); var panelsNaturalDimensions = Vec3.subtract(panelsNaturalExtentsMax, panelsNaturalExtentsMin);
var SCALING_FACTOR = 0.01; var SCALING_FACTOR = 0.01;
var orbDimensions = Vec3.multiply(orbNaturalDimensions, SCALING_FACTOR);
var panelsDimensions = Vec3.multiply(panelsNaturalDimensions, SCALING_FACTOR); var panelsDimensions = Vec3.multiply(panelsNaturalDimensions, SCALING_FACTOR);
var orbNaturalCenter = Vec3.sum(orbNaturalExtentsMin, Vec3.multiply(orbNaturalDimensions, 0.5));
var panelsNaturalCenter = Vec3.sum(panelsNaturalExtentsMin, Vec3.multiply(panelsNaturalDimensions, 0.5));
var orbCenter = Vec3.multiply(orbNaturalCenter, SCALING_FACTOR);
var panelsCenter = Vec3.multiply(panelsNaturalCenter, SCALING_FACTOR);
var panelsCenterShift = Vec3.subtract(panelsCenter, orbCenter);
var ORB_SHIFT = { x: 0, y: -1.5, z: 0.5};
function drawLobby() { function drawLobby() {
if (!panelWall) { if (!panelWall) {
print("Adding an overlay for the lobby panel wall.") print("Adding overlays for the lobby panel wall and orb shell.");
var front = Quat.getFront(Camera.getOrientation());
front.y = 0
front = Vec3.normalize(front)
var cameraEuler = Quat.safeEulerAngles(Camera.getOrientation()); var cameraEuler = Quat.safeEulerAngles(Camera.getOrientation());
var towardsMe = Quat.angleAxis(cameraEuler.y + 180, { x: 0, y: 1, z: 0});
var orbPosition = Vec3.sum(Camera.getPosition(), Vec3.multiplyQbyV(towardsMe, ORB_SHIFT));
var panelWallProps = { var panelWallProps = {
url: "https://s3.amazonaws.com/hifi-public/models/sets/Lobby/LobbyPrototype/PanelWall3.fbx", url: HIFI_PUBLIC_BUCKET + "models/sets/Lobby/LobbyPrototype/PanelWall3.fbx",
position: Vec3.sum(Camera.getPosition(), Vec3.multiply(front, 0.5)), position: Vec3.sum(orbPosition, Vec3.multiplyQbyV(towardsMe, panelsCenterShift)),
rotation: Quat.angleAxis(cameraEuler.y + 180, { x: 0, y: 1, z: 0}), rotation: towardsMe,
dimensions: panelsDimensions dimensions: panelsDimensions
} };
avatarStickPosition = MyAvatar.position var orbShellProps = {
url: HIFI_PUBLIC_BUCKET + "models/sets/Lobby/LobbyConcepts/Lobby5_OrbShellOnly.fbx",
position: orbPosition,
rotation: towardsMe,
dimensions: orbDimensions,
ignoreRayIntersection: true
};
panelWall = Overlays.addOverlay("model", panelWallProps) avatarStickPosition = MyAvatar.position;
panelWall = Overlays.addOverlay("model", panelWallProps);
orbShell = Overlays.addOverlay("model", orbShellProps);
// Create a reticle image in center of screen
var screenSize = Controller.getViewportDimensions();
var reticleProps = {
x: screenSize.x / 2 - 16,
y: screenSize.y / 2 - 16,
width: 32,
height: 32,
color: { red: 255, green: 255, blue: 255},
alpha: 1,
imageURL: HIFI_PUBLIC_BUCKET + "images/reticle.png",
};
reticle = Overlays.addOverlay("image", reticleProps);
} }
} }
var locations = {} var locations = {};
function changeLobbyTextures() { function changeLobbyTextures() {
var req = new XMLHttpRequest(); var req = new XMLHttpRequest();
req.open("GET", "https://data.highfidelity.io/api/v1/locations?limit=21", false); req.open("GET", "https://data.highfidelity.io/api/v1/locations?limit=21", false);
req.send(); req.send();
locations = JSON.parse(req.responseText).data.locations locations = JSON.parse(req.responseText).data.locations;
var NUM_PANELS = locations.length; var NUM_PANELS = locations.length;
@ -60,15 +99,18 @@ function changeLobbyTextures() {
for (var j = 0; j < NUM_PANELS; j++) { for (var j = 0; j < NUM_PANELS; j++) {
textureProp["textures"]["file" + (j + 1)] = "http:" + locations[j].thumbnail_url textureProp["textures"]["file" + (j + 1)] = "http:" + locations[j].thumbnail_url
} };
Overlays.editOverlay(panelWall, textureProp) Overlays.editOverlay(panelWall, textureProp);
} }
function cleanupLobby() { function cleanupLobby() {
Overlays.deleteOverlay(panelWall) Overlays.deleteOverlay(panelWall);
panelWall = false Overlays.deleteOverlay(orbShell);
locations = {} Overlays.deleteOverlay(reticle);
panelWall = false;
locations = {};
toggleEnvironmentRendering(true);
} }
function actionStartEvent(event) { function actionStartEvent(event) {
@ -79,17 +121,18 @@ function actionStartEvent(event) {
var result = Overlays.findRayIntersection(pickRay); var result = Overlays.findRayIntersection(pickRay);
if (result.intersects && result.overlayID == panelWall) { if (result.intersects && result.overlayID == panelWall) {
var panelName = result.extraInfo var panelName = result.extraInfo;
var panelStringIndex = panelName.indexOf("Panel") var panelStringIndex = panelName.indexOf("Panel");
if (panelStringIndex != -1) { if (panelStringIndex != -1) {
var panelIndex = parseInt(panelName.slice(5)) - 1 var panelIndex = parseInt(panelName.slice(5)) - 1;
if (panelIndex < locations.length) { if (panelIndex < locations.length) {
var actionLocation = locations[panelIndex] var actionLocation = locations[panelIndex];
print("Jumping to " + actionLocation.name + " at " + actionLocation.path + " in " + actionLocation.domain.name) print("Jumping to " + actionLocation.name + " at " + actionLocation.path
+ " in " + actionLocation.domain.name + " after click on panel " + panelIndex);
Window.location = actionLocation Window.location = actionLocation;
maybeCleanupLobby() maybeCleanupLobby();
} }
} }
} }
@ -98,22 +141,29 @@ function actionStartEvent(event) {
function backStartEvent() { function backStartEvent() {
if (!panelWall) { if (!panelWall) {
drawLobby() toggleEnvironmentRendering(false);
changeLobbyTextures() drawLobby();
changeLobbyTextures();
} else { } else {
cleanupLobby() cleanupLobby();
} }
} }
var CLEANUP_EPSILON_DISTANCE = 0.025 var CLEANUP_EPSILON_DISTANCE = 0.025
function maybeCleanupLobby() { function maybeCleanupLobby() {
if (Vec3.length(Vec3.subtract(avatarStickPosition, MyAvatar.position)) > CLEANUP_EPSILON_DISTANCE) { if (panelWall && Vec3.length(Vec3.subtract(avatarStickPosition, MyAvatar.position)) > CLEANUP_EPSILON_DISTANCE) {
cleanupLobby() cleanupLobby();
} }
} }
Controller.actionStartEvent.connect(actionStartEvent) function toggleEnvironmentRendering(shouldRender) {
Controller.backStartEvent.connect(backStartEvent) Menu.setIsOptionChecked("Voxels", shouldRender);
Script.update.connect(maybeCleanupLobby) Menu.setIsOptionChecked("Models", shouldRender);
Menu.setIsOptionChecked("Metavoxels", shouldRender);
}
Controller.actionStartEvent.connect(actionStartEvent);
Controller.backStartEvent.connect(backStartEvent);
Script.update.connect(maybeCleanupLobby);
Script.scriptEnding.connect(maybeCleanupLobby); Script.scriptEnding.connect(maybeCleanupLobby);