From 596ce8e9c12c8a75db2a1d7092cf3f9c38ab3969 Mon Sep 17 00:00:00 2001 From: David Rowe Date: Sat, 7 Oct 2017 21:46:56 +1300 Subject: [PATCH] Add script that tests setting your listening position and orientation --- scripts/developer/utilities/tools/testEars.js | 101 ++++++++++++++++++ 1 file changed, 101 insertions(+) create mode 100644 scripts/developer/utilities/tools/testEars.js diff --git a/scripts/developer/utilities/tools/testEars.js b/scripts/developer/utilities/tools/testEars.js new file mode 100644 index 0000000000..600358eeb1 --- /dev/null +++ b/scripts/developer/utilities/tools/testEars.js @@ -0,0 +1,101 @@ +// +// 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); +}());