101 lines · 3.6 KB · JavaScript
RawDownload
////  testEars.js////  Positions and orients your listening position at a virtual head created in front of you.////  Created by David Rowe on 7 Oct 2017.//  Copyright 2017 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.// (function () {     "use strict";     var overlays = [            {                // Head                type: "sphere",                properties: {                    dimensions: { x: 0.2, y: 0.3, z: 0.25 },                    position: { x: 0, y: 0, z: -2 },                    rotation: Quat.fromVec3Degrees({ x: 0, y: 180, z: 0 }),                    color: { red: 128, green: 128, blue: 128 },                    alpha: 1.0,                    solid: true                }            },            {                // Left ear                type: "sphere",                properties: {                    dimensions: { x: 0.04, y: 0.10, z: 0.08 },                    localPosition: { x: -0.1, y: 0, z: 0.05 },                    localRotation: Quat.fromVec3Degrees({ x: 0, y: 0, z: 0 }),                    color: { red: 255, green: 0, blue: 0 }, // Red for "port".                    alpha: 1.0,                    solid: true                }            },            {                // Right ear                type: "sphere",                properties: {                    dimensions: { x: 0.04, y: 0.10, z: 0.08 },                    localPosition: { x: 0.1, y: 0, z: 0.05 },                    localRotation: Quat.fromVec3Degrees({ x: 0, y: 0, z: 0 }),                    color: { red: 0, green: 255, blue: 0 }, // Green for "starboard".                    alpha: 1.0,                    solid: true                }            },            {                // Nose                type: "sphere",                properties: {                    dimensions: { x: 0.04, y: 0.04, z: 0.04 },                    localPosition: { x: 0, y: 0, z: -0.125 },                    localRotation: Quat.fromVec3Degrees({ x: 0, y: -0.08, z: 0 }),                    color: { red: 160, green: 160, blue: 160 },                    alpha: 1.0,                    solid: true                }            }        ],        originalListenerMode;     function setUp() {        var i, length;         originalListenerMode = MyAvatar.audioListenerMode;         for (i = 0, length = overlays.length; i < length; i++) {            if (i === 0) {                overlays[i].properties.position = Vec3.sum(MyAvatar.getHeadPosition(),                    Vec3.multiplyQbyV(MyAvatar.orientation, overlays[i].properties.position));                overlays[i].properties.rotation = Quat.multiply(MyAvatar.orientation, overlays[i].properties.rotation);            } else {                overlays[i].properties.parentID = overlays[0].id;            }            overlays[i].id = Overlays.addOverlay(overlays[i].type, overlays[i].properties);        }         MyAvatar.audioListenerMode = MyAvatar.audioListenerModeCustom;        MyAvatar.customListenPosition = overlays[0].properties.position;        MyAvatar.customListenOrientation = overlays[0].properties.orientation;    }     function tearDown() {        var i, length;        for (i = 0, length = overlays.length; i < length; i++) {            Overlays.deleteOverlay(overlays[i].id);        }         MyAvatar.audioListenerMode = originalListenerMode;    }     Script.setTimeout(setUp, 2000); // Delay so that overlays display if script runs at Interface start.    Script.scriptEnding.connect(tearDown);}());