129 lines · 3.8 KB · JavaScript
RawDownload
////  Created by Zach Pomerantz on June 16, 2016.//  Copyright 2016 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 SERVER = Account.metaverseServerURL + '/api/v1'; var OVERLAY = null; // Every time you enter a domain, display the domain's metadatalocation.hostChanged.connect(function(host) {    print('Detected host change:', host);     // Fetch the domain ID from the directory server    var placeData = request(SERVER + '/places/' + host);    if (!placeData) {        print('Cannot find place name - abandoning metadata request for', host);        return;            }    var domainID = placeData.data.place.domain.id;    print('Domain ID:', domainID);     // Fetch the domain metadata from the directory server    var domainData = request(SERVER + '/domains/' + domainID);    print(SERVER + '/domains/' + domainID);    if (!domainData) {        print('Cannot find domain data - abandoning metadata request for', domainID);        return;    }    var metadata = domainData.domain;    print('Domain metadata:', JSON.stringify(metadata));     // Display the fetched metadata in an overlay    displayMetadata(host, metadata);}); Script.scriptEnding.connect(clearMetadata); function displayMetadata(place, metadata) {    clearMetadata();     var COLOR_TEXT = { red: 255, green: 255, blue: 255 };    var COLOR_BACKGROUND = { red: 0, green: 0, blue: 0 };    var MARGIN = 200;    var STARTING_OPACITY = 0.8;    var FADE_AFTER_SEC = 2;    var FADE_FOR_SEC = 4;     var fade_per_sec = STARTING_OPACITY / FADE_FOR_SEC;    var properties = {        color: COLOR_TEXT,        alpha: STARTING_OPACITY,        backgroundColor: COLOR_BACKGROUND,        backgroundAlpha: STARTING_OPACITY,        font: { size: 24 },        x: MARGIN,        y: MARGIN    };     // Center the overlay on the screen    properties.width = Window.innerWidth - MARGIN*2;    properties.height = Window.innerHeight - MARGIN*2;     // Parse the metadata into text    parsed = [ 'Welcome to ' + place + '!',, ];    if (metadata.description) {        parsed.push(description);    }    if (metadata.tags && metadata.tags.length) {        parsed.push('Tags: ' + metadata.tags.join(','));    }    if (metadata.capacity) {        parsed.push('Capacity (max users): ' + metadata.capacity);    }    if (metadata.maturity) {        parsed.push('Maturity: ' + metadata.maturity);    }    if (metadata.hosts && metadata.hosts.length) {        parsed.push('Hosts: ' + metadata.tags.join(','));    }    if (metadata.online_users) {        parsed.push('Users online: ' + metadata.online_users);    }     properties.text = parsed.join('\n\n');     // Display the overlay    OVERLAY = Overlays.addOverlay('text', properties);     // Fade out the overlay over 10 seconds    !function() {        var overlay = OVERLAY;        var alpha = STARTING_OPACITY;         var fade = function() {            // Only fade so long as the same overlay is up            if (overlay == OVERLAY) {                alpha -= fade_per_sec / 10;                if (alpha <= 0) {                    clearMetadata();                } else {                    Overlays.editOverlay(overlay, { alpha: alpha, backgroundAlpha: alpha });                    Script.setTimeout(fade, 100);                }            }        };        Script.setTimeout(fade, FADE_AFTER_SEC * 1000);    }();} function clearMetadata() {    if (OVERLAY) {        Overlays.deleteOverlay(OVERLAY);    }} // Request JSON from a url, synchronouslyfunction request(url) {    var req = new XMLHttpRequest();    req.responseType = 'json';    req.open('GET', url, false);    req.send();    return req.status == 200 ? req.response : null;}